简单工厂模式C++实现

来源:互联网 发布:区域分割粒子群算法 编辑:程序博客网 时间:2024/06/06 01:57

<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;}


0 0
原创粉丝点击