簡單工廠模式C++實現
阿新 • • 發佈:2018-11-03
<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; }