简单工厂模式
设计模式
简单工厂模式属于类的构建型模型,又叫静态工厂方法模式。通过专门定义一个类来创建其他类的实例,被创建的类一般都有共同的父类。
模式所含的角色及其职责
- 工厂角色
简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
- 抽象角色
简单工厂模式所创建的所有对象的父类,负责描述所有实例所共有的接口。
- 具体产品角色
简单工厂所创建的具体实例对象。
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| #include <iostream> #include <string.h>
using namespace std;
class Fruit { public: virtual void getFruit() = 0; protected: private: };
class Banana:public Fruit { public: virtual void getFruit() { cout << "get banana!" << endl; } protected: private: };
class Apple:public Fruit { public: virtual void getFruit() { cout << "get apple!" << endl; } protected: private: };
class Factory { public: Fruit* creat(char *p) { if(strcmp(p, "apple") == 0){ return new Apple; } else if(strcmp(p, "banana") == 0){ return new Banana; } else{ cout << "不支持" << endl; return NULL; } } protected: private: };
int main() { Factory *f = new Factory; Fruit *fruit = f->creat("banana"); fruit->getFruit(); delete fruit; delete f; cout << "Hello world!" << endl; return 0; }
|
输出:
1 2
| get banana! Hello world!
|
优缺点
优点:
用户可以直接根据工厂类去创建所需要的实例,无需了解这些对象是怎么创建与组织的,有利于整个软件体系结构的优化。
缺点:
由于工厂类集中了所有实例的创建逻辑,所以“高内聚”做的不好。另外,当产品的种类不断增多时,工厂类也需要做相应的修改,扩展性不好。