簡(jiǎn)單工廠模式又被稱為靜態(tài)工廠模式。簡(jiǎn)單工廠模式是由一個(gè)工廠對(duì)象決定創(chuàng)建出哪一種產(chǎn)品類(lèi)的實(shí)例。簡(jiǎn)單工廠模式是工廠模式家族中最簡(jiǎn)單實(shí)用的模式,可以理解為是不同工廠模式的一個(gè)特殊實(shí)現(xiàn)。
UML類(lèi)圖:
類(lèi)圖中只列出主要方法,而只有工廠類(lèi)中給出了構(gòu)造和析構(gòu)函數(shù),并且都是私有。目的是強(qiáng)調(diào)這個(gè)工廠類(lèi)的作用只是“出產(chǎn)品”,自己不需要實(shí)例化,所以將構(gòu)造和析構(gòu)聲明為私有(這個(gè)只適用于“簡(jiǎn)單”工廠模式)。
代碼(為減小篇幅,代碼只實(shí)現(xiàn)部分,并code到一個(gè)cpp文件中):
1
#include <iostream>
2
3
using namespace std;
4
5
/**//// @brief Base operation class. 6
class Operation
7

{
8
protected:
9
double m_numA;
10
double m_numB;
11
12
public:
13
Operation(): m_numA(0.0), m_numB(0.0)
{
14
cout << "Operation constructor" << endl;
15
}
16
17
virtual ~Operation()
{
18
cout << "Operation destructor" << endl;
19
}
20
21
double virtual getResult() = 0;
22
};
23
24
/**//// @brief The class implement the add operation.25
class OperAdd: public Operation
26

{
27
public:
28
OperAdd(double a, double b)
{
29
cout << "OperAdd constructor" << endl;
30
m_numA = a;
31
m_numB = b;
32
}
33
34
~OperAdd()
{
35
cout << "OperAdd destructor" << endl;
36
}
37
38
double getResult()
{
39
return (m_numA + m_numB);
40
}
41
};
42
43
/**//// @brief The class OperSub, OperMul and OperDiv omitted. 44
45
class OperFactory
46

{
47
public:
48
enum OPER_TYPE
{
49
ADD = 1,
50
SUB = 2,
51
MUL = 3,
52
DIV = 4
53
};
54
55
static Operation* createOperation(OPER_TYPE oper, double a, double b);
56
};
57
58
Operation* OperFactory::createOperation(OPER_TYPE oper, double a, double b)
59

{
60
Operation* pOper = NULL;
61
62
switch (oper)
{
63
case ADD:
64
pOper = new OperAdd(a, b);
65
break;
66
default:
67
break;
68
}
69
70
return pOper;
71
}
72
73
int main()
74

{
75
Operation* pOper = OperFactory::createOperation(OperFactory::ADD, 2.1, 3.3);
76
77
if (pOper)
{
78
cout << pOper->getResult() << endl;
79
80
delete pOper;
81
pOper = NULL;
82
}
83
84
return 0;
85
}
簡(jiǎn)單工廠模式的最大優(yōu)點(diǎn)在于工廠類(lèi)中包含了必要的邏輯判斷,根據(jù)客戶端的選擇條件動(dòng)態(tài)實(shí)例化相關(guān)的類(lèi),對(duì)于客戶端來(lái)說(shuō),去除了與具體產(chǎn)品的依賴。但簡(jiǎn)單工廠模式的工廠類(lèi)是開(kāi)放的,如果要增加其它產(chǎn)品,則要修改工廠類(lèi),這一點(diǎn)違背開(kāi)放-封閉原則(Open-Close Principle,對(duì)擴(kuò)展開(kāi)發(fā),對(duì)修改關(guān)閉)。而要克服這一缺點(diǎn),則要使用工廠方法模式(Factory Method),這種經(jīng)過(guò)改進(jìn)工廠模式將在下一節(jié)介紹。