定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory使一个类的实例化延迟到其子类。(四人团)

    实际上: 工厂模式主要就是用于创建对象。新添加类时,不会影响以前的系统代码。

二、基本思想

   核心思想:是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。

     客户类和工厂类分开,消费者任何时候需要某种产品类对象,只需要向工厂类(有静态成员函数接收)提交参数和请求即可。消费者无需修改(直接用所有产品共同的父类指针指向)就可以接纳和使用新产品类的对象。

三、优缺点分析

GOOD: 适用于不同情况创建不同的类时

BAD:  客户端必须要知道基类和工厂类,耦合性差,而且当产品修改时,工厂类也要做相应修改(如:如何创建及如何向客户端提供)

四、UML实例图

(创建型模式)Factory——简单工厂模式

注意点:(工厂类与基类为关联关系)

五、示例源码

   1: (工厂类与基类为关联关系)
   2: 例:
//基类
class COperation
   5: {
public:
int m_nFirst;
int m_nSecond;
double GetResult()
  10:     {
double dResult=0;
return dResult;
  13:     }
  14: };
//加法
public COperation
  17: {
public:
double GetResult()
  20:     {
return m_nFirst+m_nSecond;
  22:     }
  23: };
//减法
public COperation
  26: {
public:
double GetResult()
  29:     {
return m_nFirst-m_nSecond;
  31:     }
  32: };
  33:  
//工厂类
class CCalculatorFactory
  36: {
public:
char cOperator);
  39: };
  40:  
char cOperator)
  42: {
  43:     COperation *oper;
//在C#中可以用反射来取消判断时用的switch,在C++中用什么呢?RTTI??
switch (cOperator)
  46:     {
'+':
new AddOperation();
break;
'-':
new SubOperation();
break;
default:
new AddOperation();
break;
  56:     }
return oper;
  58: }
  59:  
  60: 客户端
int main()
  62: {
int a,b;
  64:     cin>>a>>b;
'-');
  66:     op->m_nFirst=a;
  67:     op->m_nSecond=b;
  68:     cout<<op->GetResult()<<endl;
return 0;
  70: }

相关文章: