使用简单工厂模式实现四则运算 C++
2016-03-16 08:38
836 查看
今天实现了一个简单工厂模式, 实现四则运算。
说下对简单工厂的理解, 个人感觉他就是利用一个工厂类的静态函数获取一个工厂产品的实例, 在C++中表现就是 获取一个指向产品的派生类的基类指针, 利用多态 实现具体产品类的调用。
ie, 利用工厂类负责创建对象的实例
下面这是我们所绘制的C++的UML类图
代码实现:
operation.h
MainOperation.h
OperFactory.h
main.h
说下对简单工厂的理解, 个人感觉他就是利用一个工厂类的静态函数获取一个工厂产品的实例, 在C++中表现就是 获取一个指向产品的派生类的基类指针, 利用多态 实现具体产品类的调用。
ie, 利用工厂类负责创建对象的实例
下面这是我们所绘制的C++的UML类图
代码实现:
operation.h
#ifndef _OPERATION_H_ #define _OPERATION_H_ template<class T> class COperation { public: COperation(){} COperation(T a, T b) :numberA(a), numberB(b){} /************************************************************************/ /* 私有数据的访问方法 */ /************************************************************************/ T getNumA() const{ return numberA; } T getNumB() const{ return numberB; } void setNumA(const T & a){ numberA = a; } void setNumB(const T & b){ numberB = b; } /************************************************************************/ /* 获取计算结果 */ /************************************************************************/ virtual T getResult() const = 0; private: T numberA; T numberB; }; #endif // !_OPERATION_H_
MainOperation.h
#ifndef _MAINOPERATION_H_ #define _MAINOPERATION_H_ #include "Operation.h" #include <iostream> /************************************************************************/ /* 加法运算类 */ /************************************************************************/ template<class T> class CAddOperation : public COperation<T>{ public: CAddOperation(){} CAddOperation(T a, T b) : COperation(a, b){} T getResult() const{ return getNumA() + getNumB(); } }; /************************************************************************/ /* 减法运算类 */ /************************************************************************/ template<class T> class CSubOperation : public COperation<T>{ public: CSubOperation(){}; CSubOperation(T a, T b) : COperation(a, b){} T getResult() const { return getNumA() - getNumB(); } }; /************************************************************************/ /* 乘法运算类 */ /************************************************************************/ template<class T> class CMulOperation : public COperation<T>{ public: CMulOperation(){}; CMulOperation(T a, T b) : COperation(a, b){} T getResult() const { return getNumA() * getNumB(); } }; /************************************************************************/ /* 除法运算类 */ /************************************************************************/ template<class T> class CDivOperation : public COperation<T>{ public: CDivOperation(){}; CDivOperation(T a, T b) : COperation(a, b){} T getResult() const { T b = getNumB(); if (b < 1e-6 && b > 1e-6){ std::cerr << "divsion by zero" << std::endl; return 0; } return getNumA() / getNumB(); } }; #endif // _MAINOPERATION_H_
OperFactory.h
#ifndef _OPERFACTORY_H_ #define _OPERFACTORY_H_ #include <memory> #include "MainOperation.h" template <class T> class COperFactory{ public: /************************************************************************/ /* 对外提供一个创建运算操作的工厂函数接口 */ /************************************************************************/ static std::shared_ptr<COperation<T>> createOperation(char oper){ COperation<T> * ptr = nullptr; switch (oper) { case '+': ptr = new CAddOperation<T>(); break; case '-': ptr = new CSubOperation<T>(); break; case '*': ptr = new CMulOperation<T>(); break; case '/': ptr = new CDivOperation<T>(); break; default: ptr = nullptr; break; } return std::shared_ptr<COperation<T>>(ptr); } }; #endif // _OPERFACTORY_H_
main.h
#include "OperFactory.h" #include <iostream> using namespace std; /************************************************************************/ /* 借助简单工厂模式, 实现 两个数字的加减乘除四则运算操作 */ /************************************************************************/ int main(){ shared_ptr<COperation<double>> oper = COperFactory<double>::createOperation('/'); oper->setNumA(3.0); oper->setNumB(4.0); cout << oper->getResult() << endl; system("pause"); return 0; }
相关文章推荐
- HDU 2717 Catch That Cow(BFS)
- [转载]C++中引用与指针的区别(详细介绍)
- C语言实现二叉查找树(BST)的基本操作
- C语言杂谈(二)自增运算符++与间接访问运算符*的结合关系和应用模式
- C++11: CAS
- c++程序员不可不知的101条实用经验
- iOS c语言 基本运算符
- C语言 进制关系
- C语言基础-07-预处理指令1-宏定义
- C语言基础-08-预处理指令2-条件编译
- C语言基础-09-预处理指令3-文件包含
- C语言基础-10-变量类型
- C语言基础-11-static和extern关键字1-对函数的作用
- C语言基础-12-static和extern关键字2-对变量的作用
- C语言基础-13-结构体
- C语言基础-14-枚举
- C语言基础-15-typedef
- VC++6.0 afxres.h,mfc42d.lib错误解决方法
- C++ Exceptional 名称查找、命名空间和接口原则
- C++混合编程之idlcpp教程(一)