简单工厂模式

    简单工厂模式

一、简介

  简单工厂模式又叫静态工厂方法(Static Factory Method)模式。

  其实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

  简单的说,就是一个专门的类来负责所有的实例的创建。

二、角色及其职责

  工厂(Creator)角色

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

  抽象产品(Product)角色

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

  具体产品(Concrete Product)角色

    是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

三、优缺点

  优点

    1. 分离产品的创建者和消费者,有利于软件系统结构的优化。

    2. 能根据外界给定的信息,决定应该创建哪个具体类的对象。

  缺点:

    1. 违反了开放封闭原则,如果需要添加新的类,需要改变工厂类。

    2. 一旦工厂不能正常工作,整个系统都要受到影响

    3. 由于工厂类是静态的,无法让子类继承,无法形成基于基类的继承树结构。

四、使用场景

  工厂类负责创建的对象比较少;

五、源码

  摘自《大话设计模式》

 1 class COperation
 2 {
 3 public:
 4     int m_nFirst;
 5     int m_nSecond;
 6     virtual double GetResult() = 0;11 };
12 //加法
13 class AddOperation : public COperation
14 {
15 public:
16     virtual double GetResult()
17     {
18         return m_nFirst + m_nSecond;
19     }
20 };
21 //减法
22 class SubOperation : public COperation
23 {
24 public:
25     virtual double GetResult()
26     {
27         return m_nFirst - m_nSecond;
28     }
29 };
30 
31 //工厂类
32 class CCalculatorFactory
33 {
34 public:
35     static COperation* Create(char cOperator);
36 };
37 
38 COperation* CCalculatorFactory::Create(char cOperator)
39 {
40     COperation *oper;
41     //在C#中可以用反射来取消判断时用的switch,在C++中用什么呢?RTTI??
42     switch (cOperator)
43     {
44     case '+':
45         oper=new AddOperation();
46         break;
47     case '-':
48         oper=new SubOperation();
49         break;
50     default:
51         oper=new AddOperation();
52         break;
53     }
54     return oper;
55 }
56 
57 客户端
58 int main()
59 {
60     int a,b;
61     cin>>a>>b;
62     COperation * op = CCalculatorFactory::Create('-');
63     op->m_nFirst=a;
64     op->m_nSecond=b;
65     cout<<op->GetResult()<<endl;
66     return 0;
67 }
原文地址:https://www.cnblogs.com/SnailProgramer/p/4198884.html