简单工厂模式
设计模式
简单工厂模式属于类的构建型模型,又叫静态工厂方法模式。通过专门定义一个类来创建其他类的实例,被创建的类一般都有共同的父类。
模式所含的角色及其职责
- 工厂角色
简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
- 抽象角色
简单工厂模式所创建的所有对象的父类,负责描述所有实例所共有的接口。
- 具体产品角色
简单工厂所创建的具体实例对象。

代码实现
| 12
 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;
 }
 
 | 
输出:
| 12
 
 | get banana!Hello world!
 
 | 
优缺点
优点:
用户可以直接根据工厂类去创建所需要的实例,无需了解这些对象是怎么创建与组织的,有利于整个软件体系结构的优化。
缺点:
由于工厂类集中了所有实例的创建逻辑,所以“高内聚”做的不好。另外,当产品的种类不断增多时,工厂类也需要做相应的修改,扩展性不好。