首页 > 代码库 > 设计模式——抽象工厂模式(C++实现)

设计模式——抽象工厂模式(C++实现)

 

 

技术分享

 

技术分享

  1 #include <iostream>  2 #include <string>  3   4 using namespace std;  5   6   7 class STAbstractProductA  8 {  9 public: 10         virtual void use() = 0; 11 }; 12  13 class STProductA1: public STAbstractProductA 14 { 15 public: 16         virtual void use() 17         { 18                 cout<< "use ProductA1............"<< endl; 19         } 20 }; 21  22 class STProductA2: public STAbstractProductA 23 { 24 public: 25         virtual void use() 26         { 27                 cout<< "use ProductA2............"<< endl; 28         } 29 }; 30  31 class STAbstractProductB 32 { 33 public: 34         virtual void eat() = 0; 35 }; 36  37 class STProductB1: public STAbstractProductB 38 { 39 public: 40         virtual void eat() 41         { 42                 cout<< "eat ProductB1............"<< endl; 43         } 44 }; 45  46 class STProductB2: public STAbstractProductB 47 { 48 public: 49         virtual void eat() 50         { 51                 cout<< "eat ProductB2............"<< endl; 52         } 53 }; 54  55 class STAbstractFactory 56 { 57 public: 58         virtual STAbstractProductA* CreateProductA() = 0; 59         virtual STAbstractProductB* CreateProductB() = 0; 60 }; 61  62 class STConcreteFactoryA: public STAbstractFactory 63 { 64 public: 65         virtual STAbstractProductA* CreateProductA() 66         { 67                 return new STProductA1; 68         } 69         virtual STAbstractProductB* CreateProductB() 70         { 71                 return new STProductB1; 72         } 73 }; 74  75 class STConcreteFactoryB: public STAbstractFactory 76 { 77 public: 78         virtual STAbstractProductA* CreateProductA() 79         { 80                 return new STProductA2; 81         } 82         virtual STAbstractProductB* CreateProductB() 83         { 84                 return new STProductB2; 85         } 86 }; 87  88 int main(int argc, char* argv[]) 89 { 90         STAbstractFactory* fc = new STConcreteFactoryA(); 91         STAbstractProductA* pa = fc->CreateProductA(); 92         STAbstractProductB* pb = fc->CreateProductB(); 93  94         pa->use(); 95         pb->eat(); 96  97         STAbstractFactory* fc2 = new STConcreteFactoryB(); 98         STAbstractProductA* pa2 = fc2->CreateProductA(); 99         STAbstractProductB* pb2 = fc2->CreateProductB();100 101         pa2->use();102         pb2->eat();103 104         return 0;105 }106 ////////////////////////////////////////107 [root@ ~/learn_code/design_pattern/9_abstract_factory]$ ./abstract_factory       108 use ProductA1............109 eat ProductB1............110 use ProductA2............111 eat ProductB2............

 

设计模式——抽象工厂模式(C++实现)