參考:http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/factory_method.html ...
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class CProduct 7 { 8 public: 9 virtual void Use() = 0; 10 }; 11 12 class CConcreteProductA: public CProduct 13 { 14 public: 15 virtual void Use() 16 { 17 cout<< "ConCreteProductA....."<< endl; 18 } 19 }; 20 21 class CConcreteProductB: public CProduct 22 { 23 public: 24 virtual void Use() 25 { 26 cout<< "ConCreteProductB....."<< endl; 27 } 28 }; 29 30 class CFactory 31 { 32 public: 33 virtual CProduct* FactoryMethod() = 0; 34 }; 35 36 class CConcreteFactoryA: public CFactory 37 { 38 public: 39 virtual CProduct* FactoryMethod() 40 { 41 return new CConcreteProductA(); 42 } 43 }; 44 45 class CConcreteFactoryB: public CFactory 46 { 47 public: 48 virtual CProduct* FactoryMethod() 49 { 50 return new CConcreteProductB(); 51 } 52 }; 53 54 int main(void) 55 { 56 CFactory* cFactoryA = new CConcreteFactoryA(); 57 CProduct* cProductA = cFactoryA->FactoryMethod(); 58 59 cProductA->Use(); 60 61 delete cFactoryA; 62 delete cProductA; 63 64 65 CFactory* cFactoryB = new CConcreteFactoryB(); 66 CProduct* cProductB = cFactoryB->FactoryMethod(); 67 68 cProductB->Use(); 69 70 delete cFactoryB; 71 delete cProductB; 72 73 return 0; 74 } 75 ////////////////////////////// 76 [wenchaozeng@~/learn_code/design_pattern/6_factory_method]$ ./FactoryMethod 77 ConCreteProductA..... 78 ConCreteProductB.....
參考:http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/factory_method.html