1. 程式人生 > >設計模式——抽象工廠模式(C++實現)

設計模式——抽象工廠模式(C++實現)

concrete out png return style bsp ctp img using

技術分享

技術分享

  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++實現)