抽象工厂模式
1) 意图:
提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体的类。(这里强调一系列,这是抽象工厂和工厂模式的主要区别,工厂模式工厂类和产品种类是一一对应的,而抽象工厂则可以创建多种相关或相互依赖的一系列产品)
2) 结构:
其中:
AbstractFactory为创建抽象产品对象声明的工厂接口
ConcreteFactory实现创建具体产品对象的工厂
AbstractProduct为一类产品对象声明一个产品接口
Product定义一个具体的产品对象
Client只使用由AbstractFactory和AbstractProduct声明的接口
3) 适用性:
4) 举例:
1 #include <iostream> 2 class AbstractProductA 3 { 4 }; 5 class ProductA1 : public AbstractProductA 6 { 7 public: 8 ProductA1() 9 { 10 std::cout << "ProductA1" << std::endl; 11 } 12 }; 13 class ProductA2 : public AbstractProductA 14 { 15 public: 16 ProductA2() 17 { 18 std::cout << "ProductA2" << std::endl; 19 } 20 }; 21 class AbstractProductB 22 { 23 }; 24 class ProductB1 : public AbstractProductB 25 { 26 public: 27 ProductB1() 28 { 29 std::cout << "ProductB1" << std::endl; 30 } 31 }; 32 class ProductB2 : public AbstractProductB 33 { 34 public: 35 ProductB2() 36 { 37 std::cout << "ProductB2" << std::endl; 38 } 39 }; 40 41 42 class AbstractFactory 43 { 44 public: 45 AbstractFactory() {} 46 virtual ~AbstractFactory() {} 47 virtual AbstractProductA* CreateProductA() = 0; 48 virtual AbstractProductB* CreateProductB() = 0; 49 }; 50 class ConcreateFactory1 : public AbstractFactory 51 { 52 public: 53 virtual AbstractProductA* CreateProductA() 54 { 55 return new ProductA1(); 56 } 57 virtual AbstractProductB* CreateProductB() 58 { 59 return new ProductB1(); 60 } 61 }; 62 class ConcreateFactory2 : public AbstractFactory 63 { 64 public: 65 virtual AbstractProductA* CreateProductA() 66 { 67 return new ProductA2(); 68 } 69 virtual AbstractProductB* CreateProductB() 70 { 71 return new ProductB2(); 72 } 73 }; 74 75 int main() 76 { 77 // 生产第1种AB产品 78 AbstractFactory* factory1 = new ConcreateFactory1(); 79 AbstractProductA* productA1 = factory1->CreateProductA(); 80 AbstractProductB* productB1 = factory1->CreateProductB(); 81 82 // 生产第2种AB产品 83 AbstractFactory* factory2 = new ConcreateFactory2(); 84 AbstractProductA* productA2 = factory1->CreateProductA(); 85 AbstractProductB* productB2 = factory1->CreateProductB(); 86 87 delete factory1; 88 delete productA1; 89 delete productB1; 90 delete factory2; 91 delete productA2; 92 delete productB2; 93 system("pause"); 94 }
c++ 创建型模式-抽象工厂(Abstract_Factory)
原文:https://www.cnblogs.com/ho966/p/12227352.html