代码
下面既是 c++ 实现的简单工厂设计模式的代码,这里是采用例子的方法进行描述的,让你们更加易懂,例子采用的是加、减、乘、除各个不同算法的类。此设计模式主要分为三个部分:
- 工厂函数,负责生产出具体算法类,对应下面代码的 OperationFactory
- 算法类的抽象,是不同算法的基类,对应下面代码的 Operation
- 具体的算法类,算法的具体类,对应下面代码的 OperationAdd,OperationSub,OperationMul,OperationDiv
#include <iostream> #include <string> using std::string; class Operation { protected: double numberA; double numberB; public: Operation():numberA(0),numberB(0){}; Operation(double A,double B):numberA(A),numberB(B){}; void setA(double A){numberA = A;}; void setB(double B){numberB = B;}; virtual double getResult() = 0; }; class OperationAdd : public Operation { public: virtual double getResult(){return numberA + numberB;}; }; class OperationSub : public Operation { public: virtual double getResult(){return numberA - numberB;}; }; class OperationMul : public Operation { public: virtual double getResult(){return numberA * numberB;}; }; class OperationDiv : public Operation { public: virtual double getResult(){return numberA / numberB;}; }; class OperationFactory { public: static Operation * creatOperation(int operation) { Operation *result = nullptr; switch(operation) { case '+': result = new OperationAdd(); break; case '-': result = new OperationSub(); break; case '*': result = new OperationMul(); break; case '/': result = new OperationDiv(); break; } return result; } }; int main() { Operation *oper = nullptr; oper = OperationFactory::creatOperation('/'); oper->setA(9); oper->setB(8); std::cout<<oper->getResult()<<"\n"; delete oper; return 0; }
详细表述
- 首先我们声明一个基类指针,给它赋值具体的算法类(抽象的使用各个具体的算法类)
- 加减乘除是二元算法,需要设置两个值,这是所有算法一样的操作,不需要改变,因此不用使用虚函数
- 每个算法类包括基类,都有一个方法 getResult 获取最后的结果,不同的算法具体的实现不一样,因此需要重写,设置为虚函数
- 工厂类接受一个字符类型参数,利用 switch 来生成不同的具体算法类按指针返回,赋给基类指针
- 然后我们使用的时候直接使用基类指针进行调用,采用运行时判断使得不同的类调用不同的虚函数 getResult 实现多态
后续
后续还有工厂模式,抽象工厂模式,可以一块食用。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于