(创建型模式)Factory——简单工厂模式
一、意图
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory使一个类的实例化延迟到其子类。(四人团)
实际上: 工厂模式主要就是用于创建对象。新添加类时,不会影响以前的系统代码。
二、基本思想
核心思想:是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。
客户类和工厂类分开,消费者任何时候需要某种产品类对象,只需要向工厂类(有静态成员函数接收)提交参数和请求即可。消费者无需修改(直接用所有产品共同的父类指针指向)就可以接纳和使用新产品类的对象。
三、优缺点分析
GOOD: 适用于不同情况创建不同的类时
BAD: 客户端必须要知道基类和工厂类,耦合性差,而且当产品修改时,工厂类也要做相应修改(如:如何创建及如何向客户端提供)
四、UML实例图
注意点:(工厂类与基类为关联关系)
五、示例源码
1: (工厂类与基类为关联关系) 2: 例:3: //基类
4: class COperation
5: {6: public:
7: int m_nFirst;
8: int m_nSecond;
9: virtual double GetResult()
10: {11: double dResult=0;
12: return dResult;
13: } 14: };15: //加法
16: class AddOperation : public COperation
17: {18: public:
19: virtual double GetResult()
20: {21: return m_nFirst+m_nSecond;
22: } 23: };24: //减法
25: class SubOperation : public COperation
26: {27: public:
28: virtual double GetResult()
29: {30: return m_nFirst-m_nSecond;
31: } 32: }; 33: 34: //工厂类
35: class CCalculatorFactory
36: {37: public:
38: static COperation* Create(char cOperator);
39: }; 40: 41: COperation* CCalculatorFactory::Create(char cOperator)
42: { 43: COperation *oper;44: //在C#中可以用反射来取消判断时用的switch,在C++中用什么呢?RTTI??
45: switch (cOperator)
46: {47: case '+':
48: oper=new AddOperation();
49: break;
50: case '-':
51: oper=new SubOperation();
52: break;
53: default:
54: oper=new AddOperation();
55: break;
56: }57: return oper;
58: } 59: 60: 客户端61: int main()
62: {63: int a,b;
64: cin>>a>>b;65: COperation * op=CCalculatorFactory::Create('-');
66: op->m_nFirst=a; 67: op->m_nSecond=b; 68: cout<<op->GetResult()<<endl;69: return 0;
70: }

浙公网安备 33010602011771号