抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
通常是在运行时刻在创建一个ConcreteFactory类的实例,这个具体的工厂再创建具有特定实现的产品对象,也就是说,为创建不同的产品对象,客户端应使用不同的具体工厂。

abstractproducta.h
#include <string>
class AbstracProductA
{
public:
 AbstracProductA();
 virtual ~AbstracProductA();
 void Show();
 virtual std::string Name();
};
class ConcreteProductA1 : public AbstracProductA
{
public:
 ConcreteProductA1();
 std::string Name() override;
};
class ConcreteProductA2 : public AbstracProductA
{
public:
 ConcreteProductA2();
 std::string Name() override;
};
abstractfactory.h
#include "abstracproducta.h"
#include "abstracproductb.h"
class AbstractFactory
{
public:
 AbstractFactory();
 virtual ~AbstractFactory();
 virtual AbstracProductA* CreateProductA() = 0;
 virtual AbstracProductB* CreateProductB() = 0;
};
class ConcreteFactory1 : public AbstractFactory
{
public:
 ConcreteFactory1();
 AbstracProductA* CreateProductA() override;
 AbstracProductB* CreateProductB() override;
};
class ConcreteFactory2 : public AbstractFactory
{
public:
 ConcreteFactory2();
 AbstracProductA* CreateProductA() override;
 AbstracProductB* CreateProductB() override;
};
main.cpp
#include <iostream>
#include "abstractfactory.h"
#include "abstracproducta.h"
#include "abstracproductb.h"
using namespace std;
int main()
{
 AbstractFactory* factory1 = new ConcreteFactory1();
 AbstracProductA* pA1 = factory1->CreateProductA();
 AbstracProductB* pB1 =factory1->CreateProductB();
 pA1->Show();
 pB1->Show();
 AbstractFactory* factory2 = new ConcreteFactory2();
 AbstracProductA* pA2 = factory2->CreateProductA();
 AbstracProductB* pB2 =factory2->CreateProductB();
 pA2->Show();
 pB2->Show();
 return 0;
}
运行结果
抽象工厂模式的优点
模式的缺点
一个程序员如果从来没有熬夜写程序的经历,不能算是一个好程序猿,因为他没有痴迷过,所以他不会有大成就。