Mike's blog

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  0 Posts :: 23 Stories :: 83 Comments :: 0 Trackbacks

常用链接

留言簿(17)

我参与的团队

搜索

  •  

最新评论

简单工厂模式又被称为静态工厂模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。


UML类图:
 
类图中只列出主要方法,而只有工厂类中给出了构造和析构函数,并且都是私有。目的是强调这个工厂类的作用只是“出产品”,自己不需要实例化,所以将构造和析构声明为私有(这个只适用于“简单”工厂模式)。
代码(为减小篇幅,代码只实现部分,并code到一个cpp文件中):
 1#include <iostream>
 2
 3using namespace std;
 4
 5/// @brief Base operation class.
 6class Operation
 7{
 8protected:
 9    double m_numA;
10    double m_numB;
11    
12public:
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.
25class OperAdd: public Operation
26{
27public:
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
45class OperFactory
46{
47public:
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
58Operation* 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
73int main()
74{
75    Operation* pOper = OperFactory::createOperation(OperFactory::ADD, 2.13.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),这种经过改进工厂模式将在下一节介绍。
posted on 2010-08-09 21:34 老狼 阅读(1478) 评论(0)  编辑 收藏 引用 所属分类: C/C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理