简单工厂模式C++实现
2016-07-25 17:24
375 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">面向对象的优点:</span>
1、可维护:修改简单
2、可复用:可以在多个模块重复使用
3、可扩展:可以方便地加入一些其他功能
4、灵活性好:可以适应不同的需求
简单工厂模式:
对程序进行功能分析,不同功能模块独立
对计算器的UML图:
程序实现:
#include <iostream> #include <string> #include <memory> class Operation { public: Operation() = default; Operation(double a, double b) : NumberA(a), NumberB(b) {} double NumberA; double NumberB; std::string Symbol; virtual double getResult() { return 0; } }; class Add : public Operation { public: Add(double a, double b) :Operation(a, b) {} double getResult() override { return NumberA + NumberA; } }; class Sub :public Operation { public: Sub(double a, double b) :Operation(a, b) {} double getResult() override { return NumberA - NumberB; } }; class Multiply : public Operation { public: Multiply(double a, double b) :Operation(a, b) {} double getResult() override { return NumberA * NumberB; } }; class Divide : public Operation { public: Divide(double a, double b) :Operation(a, b) {} double getResult() override { double result = 0; return NumberA / NumberB; } }; class Calculate { public: Calculate() = default; Operation oper; Operation* createOperation(std::istream &in) { std::string Symbol; std::cout << "PLZ enter number a, operations, number b !" << std::endl; in >> oper.NumberA >> Symbol >> oper.NumberB; if (Symbol == "+") return new Add(oper.NumberA, oper.NumberB); if (Symbol == "-") return new Sub(oper.NumberA, oper.NumberB); if (Symbol == "*") return new Multiply(oper.NumberA, oper.NumberB); if (Symbol == "/" && oper.NumberB != 0) return new Divide(oper.NumberA, oper.NumberB); } }; int main() { Calculate cal; Operation* op = cal.createOperation(std::cin); double result = op->getResult(); std::cout << result << std::endl; delete op; return 0; }
相关文章推荐
- c++queue 介绍
- c++较好程序:实现或的操作
- C语言,struct,union
- C++ hdoj 2042 不容易系列二
- C++中的头文件和源文件
- C语言 if,switch,do,while,for分析
- C语言的编译过程
- 大数除法 C语言
- 大话设计模式20----迭代器模式
- c/c++ 宏定义
- C++ 访问权限
- c语言MP3播放器
- C++ sort和qsort有关总结
- C++单例模式设计与实现
- C++ QQ游戏 连连看外挂 内存挂入门
- c++ smart pointer
- poj1322Chocolate(724训练题)解析
- C++11 —— 基于区间(range)的 for 循环
- C++封装POSIX 线程库(一)互斥锁的封装
- C#学习笔记 对比C++