简单工厂模式(Simple Factory Pattern)

概述:

1)定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例都具有共同的父类。

特点:

1)在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被成为静态工厂方法(Static Factory Method)。

2)需要什么,只需要传入一个正确的参数,就可以获取所需要的对象,而无需知道其实现过程。

例子:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 //IPhone产品
 5 typedef enum _tagPhoneEnum
 6 {
 7     IPhoneX,
 8     IPhone11,
 9     IPhone7,
10 }PhoneEnum;
11 
12 
13 //IPhone各个产品手机共有特性
14 class IPhone
15 {
16 public:
17     virtual int Price() = 0;//价钱
18 };
19 
20 //IPhoneX 手机
21 class CIPhoneX:public IPhone
22 {
23 public:
24     virtual int Price()
25     {
26         return 5000;
27     }
28 };
29 
30 //IPhone11 手机
31 class CIPhone11:public IPhone
32 {
33 public:
34     virtual int Price()
35     {
36         return 6000;
37     }
38 };
39 
40 //IPhone手机工厂
41 class IPhoneFactory
42 {
43 public:
44     IPhone* GetPhone(PhoneEnum type)
45     {
46         switch (type)
47         {
48         case IPhone11://IPhone11
49             return new CIPhone11(); 
50         case IPhoneX://IPhoneX
51             return new CIPhoneX();
52         default://无法生产
53             cout << "不能生产该型号产品!" << endl; 
54             return NULL;
55         }
56     }
57 };
58 
59 
60 int main(int argc,char **argv)
61 {
62     IPhoneFactory* factory = new IPhoneFactory();//IPhone工厂
63     IPhone* iphone = factory->GetPhone(IPhone11);//生产IPhone11
64     if (NULL != iphone)
65     {
66         cout << iphone->Price() << endl;
67         delete iphone;
68     }
69 
70     iphone = factory->GetPhone(IPhoneX);//生产IPhone11
71     if (NULL != iphone)
72     {
73         cout << iphone->Price() << endl;
74         delete iphone;
75     }
76 
77     iphone = factory->GetPhone(IPhone7);//生产IPhone7
78     if (NULL != iphone)
79     {
80         cout << iphone->Price() << endl;
81         delete iphone;
82     }
83     
84     return 0;
85 }

通过以上例子我们可以看到简单工厂模式有以下优缺点:

优点:

1)工厂类包含必要的逻辑判断,可以决定在什么时候创建哪一个产品的实例。客户端可以免除直接创建产品对象的职责。

2)客户端无需知道所创建具体产品的类名,只需知道参数即可。

3)也可以引入配置文件,在不修改客户端代码的情况下更换和添加新的具体产品类。

缺点:

1)工厂类集中了所有产品的创建逻辑,职责过重,一旦异常,整个系统将受影响。

2)使用简单工厂模式会增加系统中类的个数(引入新的工厂类),增加系统的复杂度和理解难度。

3)系统扩展困难,一旦增加新产品不得不修改工厂逻辑,在产品类型较多时,可能造成逻辑过于复杂。

4)违反开放-封闭原则(Open Closed Principle:对于扩展是开放的,对于修改是封闭的)。

作者:快雪
本文版权归作者所有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/kuaixue/p/12778599.html