简单工厂模式

scorlw 发布于

简单工厂模式

设计模式

简单工厂模式属于类的构建型模型,又叫静态工厂方法模式。通过专门定义一个类来创建其他类的实例,被创建的类一般都有共同的父类。

模式所含的角色及其职责

  1. 工厂角色

简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。

  1. 抽象角色

简单工厂模式所创建的所有对象的父类,负责描述所有实例所共有的接口。

  1. 具体产品角色

简单工厂所创建的具体实例对象。

image-20200928222107854

代码实现

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!

优缺点

优点:

用户可以直接根据工厂类去创建所需要的实例,无需了解这些对象是怎么创建与组织的,有利于整个软件体系结构的优化。

缺点:

由于工厂类集中了所有实例的创建逻辑,所以“高内聚”做的不好。另外,当产品的种类不断增多时,工厂类也需要做相应的修改,扩展性不好。