1、抽象工厂模式UML
图1. 抽象工厂模式的UML
2、C++实现
C++实现类图为:
图2. 抽象工厂模式的C++实现类图
其中,AbstractFactory的实现代码为:
//抽象工厂类基类。
class AbstractFactory
{
public:
AbstractFactory();
~AbstractFactory(); //创建具体的产品的抽象工厂方法。
//创建A类对象。
virtual ProductA * CreateProductA() = ; //创建B类产品对象。
virtual ProductB * CreateProductB() = ;
};
ConcreteFactoryA的实现代码为:
class ConcreteFactory1 :
public AbstractFactory
{
public:
ConcreteFactory1();
~ConcreteFactory1(); //创建ConcreteProductA1的抽象工厂方法。
ProductA * CreateProductA(); //创建ConcreteProductA1的抽象工厂方法。
ProductB * CreateProductB(); };//end class ConcreteFactoryA ProductA * ConcreteFactory1::CreateProductA()
{
ProductA * pa = new ConcreteProductA1();
return pa;
}//end method CreateProductA ProductB * ConcreteFactory1::CreateProductB()
{
ProductB * pb = new ConcreteProductB1();
return pb;
}//end method CreateProductB
其中,ConcreteFactory2的代码与ConcreteFactory1的相似,不再列出。
3、Java的实现
Java实现的类视图为:
图3. 抽象工厂模式的Java实现类视图
其中,AbstractFactory的代码为:
//抽象工厂类。
public interface AbstractFactory { //创建A类产品的抽象工厂方法。
public abstract ProductA CreateProductA(); //创建B类产品的抽象工厂方法。
public abstract ProductB CreateProductB(); }//end interface AbstractFactory
ConcreteFactory1的代码为:
public class ConcreteFactory1 implements AbstractFactory { //创建ConcreteProductA1的对象。
@Override
public ProductA CreateProductA() {
// TODO Auto-generated method stub
return new ConcreteProductA1();
}//end method CreateProductA //创建ConcreteProductB1的对象。
@Override
public ProductB CreateProductB() {
// TODO Auto-generated method stub
return new ConcreteProductB1();
}//end method CreateProductB }//end class ConcreteFactory1
ConcreteFactory2的代码与ConcreteFactory1的相似,在此不再列出。