• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++设计模式编程中简单工厂与工厂方法模式的实例对比

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

作者:freshow 字体:[增加 减小] 来源:互联网 时间:2017-05-28

freshow 通过本文主要向大家介绍了设计模式c++,c++设计模式pdf,大话设计模式c++,c++设计模式视频教程,c++ qt设计模式等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

简单工厂模式实例
题目:实现计算器的输入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_ 

</div>

 
COperation.cpp(运算符基类)

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

</div>

COperation.h

/************************************************************************/ 
/* 运算符基类 */ 
/************************************************************************/ 
 
#ifndef _COPERATION_H_ 
#define _COPERATION_H_ 
 
class COperation 
{ 
public: 
  COperation(); 
  ~COperation(){}; 
     
  // 设置被运算数 
  void SetNumA(double dNumA) 
  { 
    _dNumA = dNumA; 
  }; 
   
  // 获取被运算数 
  double GetNumA() 
  { 
    return _dNumA; 
  }; 
 
  // 设置运算数 
  void SetNumB(double dNumB) 
  { 
    _dNumB = dNumB; 
  }; 
 
  // 获取运算数 
  double GetNumB() 
  { 
    return _dNumB; 
  }; 
 
  // 计算结果且在子类中实现各自的运算方法结果 
  virtual double Result() 
  { 
    double dResult = 0; 
    return dResult; 
  } 
 
private: 
  double _dNumA; 
  double _dNumB; 
}; 
 
#endif _COPERATION_H_ 

</div>

COperationAdd.h(加法运算符子类,继承于COperation)

/************************************************************************/ 
/* 加法运算符子类,继承于运算符基类 */ 
/************************************************************************/ 
#ifndef _COPERATION_ADD_H_ 
#define _COPERATION_ADD_H_ 
#include "COperation.h" 
 
 class COperationAdd : public COperation 
 { 
 public: 
   COperationAdd(){}; 
   ~COperationAdd(){}; 
 
   double Result() 
   {      
     return (GetNumA() + GetNumB()); 
   };   
 }; 
 
#endif _COPERATION_ADD_H_ 

</div>

COperationDiv.h (除法运算符子类,继承于COperation)

/************************************************************************/ 
/* 除法运算符子类,继承于运算符基类 */ 
/************************************************************************/ 
#ifndef _COPERATION_DIV_H_ 
#define _COPERATION_DIV_H_ 
#include "COperation.h" 
 
class COperationDiv : public COperation 
{ 
public: 
  COperationDiv(){}; 
  ~COperationDiv(){}; 
 
  double Result() 
  { 
    double dResult = 0; 
    if (0 != GetNumB()) 
    { 
      dResult = (GetNumA() / GetNumB()); 
    } 
    else 
    { 
      cout << "error: divisor is "; 
    } 
    return dResult; 
  };   
}; 
 
#endif _COPERATION_DIV_H_ 

</div>

COperationMul.h (乘法运算符子类,继承于COperation)

/************************************************************************/ 
/* 乘法运算符子类,继承于运算符基类 */ 
/************************************************************************/ 
#ifndef _COPERATION_MUL_H_ 
#define _COPERATION_MUL_H_ 
#include "COperation.h" 
 
class COperationMul : public COperation 
{ 
public: 
  COperationMul(){}; 
  ~COperationMul(){}; 
 
  double Result() 
  {     
    return (GetNumA() * GetNumB()); 
  };   
}; 
 
#endif _COPERATION_MUL_H_ 

</div>

COperationSub.h(减法运算符子类,继承于COperation)

/************************************************************************/ 
/* 减法运算符子类,继承于运算符基类 */ 
/************************************************************************/ 
#ifndef _COPERATION_SUB_H_ 
#define _COPERATION_SUB_H_ 
#include "COperation.h" 
 
class COperationSub : public COperation 
{ 
public: 
  COperationSub(){}; 
  ~COperationSub(){}; 
 
  double Result() 
  {     
    return (GetNumA() - GetNumB()); 
  };   
}; 
 
#endif _COPERATION_SUB_H_ 

</div>

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

// SimpleFactory.cpp : 定义控制台应用程序的入口点。 
// 
 
#include "stdafx.h" 
#include "COperationFactory.h" 
 
int _tmain(int argc, _TCHAR* argv[]) 
{   
  // 通过运算符工厂创建加法运算 
  COperation* OperAdd = COperationFactory::NewOperation("+"); 
  if (NULL != OperAdd) 
  { 
    OperAdd->SetNumA(168); // 设置被加数 
    OperAdd->SetNumB(105); // 设置加数     
    cout << "168 + 105 = " << (OperAdd->Result()) << endl; 
  } 
 
  // 通过运算符工厂创建减法运算 
  COperation* OperSub = COperationFactory::NewOperation("-"); 
  if (NULL != OperSub) 
  { 
    OperSub->SetNumA(168); // 设置被减数 
    OperSub->SetNumB(105); // 设置减数     
    cout << "168 - 105 = " << (OperSub->Result()) << endl; 
  } 
 
  // 通过运算符工厂创建乘法运算 
  COperation* OperMul = COperationFactory::NewOperation("*"); 
  if (NULL != OperMul) 
  { 
    OperMul->SetNumA(168); // 设置被乘数 
    OperMul->SetNumB(105); // 设置乘数     
    cout << "168 * 105 = " << (OperMul->Result()) << endl; 
  } 
 
  // 通过运算符工厂创建除法运算 
  COperation* OperDiv = COperationFactory::NewOperation("/"); 
  if (NULL != OperDiv) 
  { 
    OperDiv->SetNumA(168); // 设置被除数 
    OperDiv->SetNumB(105); // 设置除数     
    cout << "168 / 105 = " << (OperDiv->Result()) << endl; 
     
    OperDiv->SetNumB(0);  // 改变除数 
    cout << (OperDiv->Result()) << endl; 
  } 
 
  // 阻止控制台进程结束,便于查看结果 
  int nEnd = 0; 
  cin >> nEnd; 
 
  return 0; 
} 

</div>

抽象工厂模式实例

工程结构:

(1)抽象产品类

IFruit.h

(2)抽象工厂类

IFruitGardener.h

(3)具体产品类

CApple.h

CGrape.h

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 深入理解C++之策略模式
  • C++设计模式编程中简单工厂与工厂方法模式的实例对比
  • 解析C++编程中如何使用设计模式中的状态模式结构
  • 详解C++设计模式编程中对访问者模式的运用
  • C++设计模式编程之Flyweight享元模式结构详解
  • 详解C++设计模式编程中责任链模式的应用
  • 深入剖析设计模式中的组合模式应用及在C++中的实现
  • 设计模式中的备忘录模式解析及相关C++实例应用
  • 深入解析设计模式中的适配器模式在C++中的运用
  • 全面解析设计模式中的建造者模式及相关C++实现

相关文章

  • 2017-05-28C++实现Linux下弹出U盘的方法
  • 2017-05-28C++实现简单的职工信息管理系统
  • 2017-05-28C语言求连续最大子数组和的方法
  • 2017-05-28C和C++ const的声明差异
  • 2017-05-28用c++实现将文本每个单词首字母转换为大写
  • 2017-05-28ipv6实现tcp编程示例
  • 2017-05-28VC MFC非模态对话框的实现方法
  • 2017-05-28利用C语言的Cairo图形库绘制太极图实例教程
  • 2017-05-28详解C++编程中的静态成员与可变数据成员
  • 2017-05-28C++输出上三角/下三角/菱形/杨辉三角形(实现代码)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 详解C语言中的getgrgid()函数和getgrnam()函数
    • C语言计算代码执行所耗CPU时钟周期
    • Cocos2d-x UI开发之场景切换代码实例
    • C++中四种加密算法之DES源代码
    • C语言 数据结构之链表实现代码
    • C++中delete和delete[]的区别说明
    • 大数据情况下桶排序算法的运用与C++代码实现示例
    • C语言实现Linux下的socket文件传输实例
    • c++加法高精度算法的简单实现
    • C++中抽象类和接口的区别介绍

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有