工厂类集中了所有实例的创建逻辑,所以"高内聚"方面做的并不好,当系统的具体产品不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不是很好。
有继承、虚函数重写、父类指针指向子类对象会发生多态。
class Fruit { public: virtual void get_fruit() { std::cout<<"Fruit:getFruit"<<std::endl; } }; class Pear : public Fruit { public: virtual void get_fruit() { std::cout<<"Pear:getFruit"<<std::endl; } }; class Banana : public Fruit { public: virtual void get_fruit() { std::cout<<"Banana:getFruit"<<std::endl; } }; //dependency class Factory { public: Fruit* Create(char *name) //简单工厂的创建工作 业务逻辑在里面 { if(strcmp(name,"Pear")==0) { return new Pear(); } else if (strcmp(name,"Banana")==0) { return new Banana(); } else { return NULL; } } }; 工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好,当系统的具体产品不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不是很好。 有继承、虚函数重写、父类指针指向子类对象会发生多态。
简单工厂模就是有一个专门生产某个产品的类。
比如下图中的鼠标工厂,专业生产鼠标,给参数0,生产戴尔鼠标,给参数1,生产惠普鼠标。