簡單工廠模式又被稱為靜態工廠模式。簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現。
UML類圖:
類圖中只列出主要方法,而只有工廠類中給出了構造和析構函數,并且都是私有。目的是強調這個工廠類的作用只是“出產品”,自己不需要實例化,所以將構造和析構聲明為私有(這個只適用于“簡單”工廠模式)。
代碼(為減小篇幅,代碼只實現部分,并code到一個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
}
簡單工廠模式的最大優點在于工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態實例化相關的類,對于客戶端來說,去除了與具體產品的依賴。但簡單工廠模式的工廠類是開放的,如果要增加其它產品,則要修改工廠類,這一點違背開放-封閉原則(Open-Close Principle,對擴展開發,對修改關閉)。而要克服這一缺點,則要使用工廠方法模式(Factory Method),這種經過改進工廠模式將在下一節介紹。