C++设计模式编程中简单工厂与工厂方法模式的实例对比

2020-01-06 14:47:29丽君
易采站长站为您分析C++设计模式编程中简单工厂与工厂方法模式的实例对比,文中最后对两种模式的优缺点总结也比较详细,需要的朋友可以参考下  

简单工厂模式实例
题目:实现计算器的输入2个数和运算符,得到结果

工程结构:

(1)头文件

COperationFactory.h(运算符工厂类)

(2)源文件

SimpleFactory.cpp(客户端应用类,主函数所在)

(3)运算类

COperation.cpp(运算符基类)
COperation.h
COperationAdd.h(加法运算符子类,继承于COperation)
COperationDiv.h (除法运算符子类,继承于COperation)
COperationMul.h (乘法运算符子类,继承于COperation)
COperationSub.h(减法运算符子类,继承于COperation)

=============  代码实现部分 =============

COperationFactory.h(运算符工厂类)


/************************************************************************/ 
/* 运算符工厂类 */ 
/************************************************************************/ 
#ifndef _OPERATION_FACTORY_H_ 
#define _OPERATION_FACTORY_H_ 
 
#include "stdafx.h" 
#include "COperation.h" 
#include "COperationAdd.h" 
#include "COperationSub.h" 
#include "COperationMul.h" 
#include "COperationDiv.h" 
#include "COperationFactory.h" 
 
class COperationFactory 
{ 
public: 
  COperationFactory(){}; 
  ~COperationFactory(){}; 
 
  // 根据入参的不同,创建其对应的运算符类指针。就像是个工厂,创建用户指定的运算符类指针 
  static COperation* NewOperation(const string& strOperate) 
  { 
    // 入参合法性判断,防止后面的strOperate[0]发生越界访问 
    if (strOperate.size() != 1) 
    { 
      return NULL; 
    } 
 
    COperation* pOperation = NULL; 
    switch (strOperate[0]) 
    { 
    case '+': 
      pOperation = new COperationAdd(); 
      break; 
    case '-': 
      pOperation = new COperationSub(); 
      break; 
    case '*': 
      pOperation = new COperationMul(); 
      break; 
    case '/': 
      pOperation = new COperationDiv(); 
      break; 
    default: 
      break; 
    } 
 
    return pOperation; 
  }; 
}; 
 
#endif _OPERATION_FACTORY_H_ 

 
COperation.cpp(运算符基类)


#include "stdafx.h" 
#include "COperation.h" 
 
COperation::COperation() 
  : _dNumA(0) 
  , _dNumB(0) 
{ 
 
}