抽象工厂模式(Abstract Factory)提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。AbstractFactory模式是为了创建一组(有多类)相关或依赖的对象提供创建接口,二Factory模式是为了一类对象提供创建接口或延迟对象的创建刀子类中实现。
//Product.h
#ifndef _PRODUCT_H_
#define _PRODUCT_H_
using namespace std;
class AbstractProductA
{
};
class AbstractProductB
{
};
class ProductA1:public AbstractProductA
{
public:
ProductA1()
{
cout<<"ProductA1..."<<endl;
}
};
class ProductA2:public AbstractProductA
{
public:
ProductA2()
{
cout<<"ProductA2..."<<endl;
}
};
class ProductB1:public AbstractProductB
{
public:
ProductB1()
{
cout<<"ProductB1..."<<endl;
}
};
class ProductB2:public AbstractProductB
{
public:
ProductB2()
{
cout<<"ProductB2..."<<endl;
}
};
#endif
//AbstractFactory.h
#ifndef _ABSTRACTFACTORY_H_
#define _ABSTRACTFACTORY_H_
#include "Product.h"
class AbstractFactroy
{
public:
virtual AbstractProductA* CreateProductA(){return 0;};
virtual AbstractProductB* CreateProductB(){return 0;};
};
class ConcreteFactory1:public AbstractFactroy
{
public:
AbstractProductA* CreateProductA()
{
return new ProductA1();
}
AbstractProductB* CreateProductB()
{
return new ProductB1();
}
};
class ConcreteFactory2:public AbstractFactroy
{
public:
AbstractProductA* CreateProductA()
{
return new ProductA2();
}
AbstractProductB* CreateProductB()
{
return new ProductB2();
}
};
#endif
//main.cpp
#include<iostream>
#include "AbstractFactory.h"
int main()
{
AbstractFactroy* af1 = new ConcreteFactory1();
af1->CreateProductA();
af1->CreateProductB();
AbstractFactroy* af2 = new ConcreteFactory2();
af2->CreateProductA();
af2->CreateProductB();
return 0;
}