简单工厂模式 SimpleFactory
#include<IOSTREAM> #include <string> using namespace std; class Fruit{ public: virtual void show()=0; }; class Apple:public Fruit{ public: void show(){ cout<<"i am an apple"<<endl; } }; class Pear:public Fruit{ public: void show(){ cout<<"i am a pear"<<endl; } }; class SimpleFactory{ public: Fruit * getFruit(string type){ if("apple" == type) return new Apple(); if("pear" == type) return new Pear(); //在此处继续添加,多个产品 //由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中; //它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。 // 当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求. //这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利; else return NULL; } }; int main(int argc, char* argv[]) { SimpleFactory factory; Fruit * p = factory.getFruit("pear"); if(p){ p->show(); delete p ; } return 0; }
缺点,当有了新产品时,需在原来的代码基础上进行修改,算不得真正的扩展,扩展性很低,而且在原来代码上进行修改时,可能会产生编码错误。