设计模式之工厂模式
简单工厂不符合开闭原则,所以这里不把创建每个对象放在一个工厂里,而是把创建工厂抽象出来,每次创建一个具体对象由每个对象工厂自己常见,符合开闭原则。
1 #include<iostream> 2 using namespace std; 3 #include<string> 4 5 //简单工厂不符合开闭原则,所以这里不把创建每个水果对象放在一个工厂里,而是把创建工厂抽象出来,每次创建一个具体水果由每个对象工厂自己常见,达到开闭原则。 6 7 //抽象水果 8 class abstractFruit{ 9 public: 10 virtual void showName()=0; 11 }; 12 //苹果 13 class apple:public abstractFruit{ 14 public: 15 virtual void showName() 16 { 17 cout<<"apple"<<endl; 18 } 19 }; 20 //梨 21 class pear:public abstractFruit{ 22 public: 23 virtual void showName() 24 { 25 cout<<"pear"<<endl; 26 } 27 }; 28 //香蕉 29 class banana:public abstractFruit{ 30 public: 31 virtual void showName() 32 { 33 cout<<"banana"<<endl; 34 } 35 }; 36 37 //抽象水果工厂 38 class abstractFactory{ 39 public: 40 virtual abstractFruit* createFruit()=0; 41 }; 42 43 //苹果工厂 44 class appleFactory:public abstractFactory{ 45 public: 46 virtual abstractFruit* createFruit(){ 47 return new apple; 48 } 49 }; 50 51 //梨工厂 52 class pearFactory:public abstractFactory{ 53 public: 54 virtual abstractFruit* createFruit(){ 55 return new pear; 56 } 57 }; 58 59 //香蕉工厂 60 class bananaFactory:public abstractFactory{ 61 public: 62 virtual abstractFruit* createFruit(){ 63 return new banana; 64 } 65 }; 66 67 68 int main() 69 { 70 //创建一个抽象工厂 71 abstractFactory *factory=NULL; 72 //创建一个抽象水果 73 abstractFruit* fruit=NULL; 74 75 76 //创建一个苹果 77 factory=new appleFactory; 78 fruit=factory->createFruit(); 79 fruit->showName(); 80 delete factory; 81 delete fruit; 82 83 //创建一个香蕉 84 factory=new bananaFactory; 85 fruit=factory->createFruit(); 86 fruit->showName(); 87 delete factory; 88 delete fruit; 89 90 //创建一个梨 91 factory=new pearFactory; 92 fruit=factory->createFruit(); 93 fruit->showName(); 94 delete factory; 95 delete fruit; 96 97 return 0; 98 }