工厂方法模式简介
工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类中。
工厂方法模式在实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是改工厂类的,而现在是修改客户端代码。
UML类图
C++代码示例
//MyOperator类 定义操作数和得到结果的接口 #ifndef _MY_OPERATOR_HPP #define _MY_OPERATOR_HPP class MyOperator{ public: MyOperator(double a, double b):a(a),b(b){ } virtual double getResult(){}; protected: double a; double b; }; #endif
// AddOperator类 #ifndef _ADD_OPERATOR_HPP #define _ADD_OPERATOR_HPP #include"myoperator.hpp" class AddOperator:public MyOperator{ public: AddOperator(double a, double b):MyOperator(a,b){ } virtual double getResult() override{ return a+b; } }; #endif
// SubOperator 类 #ifndef _Sub_OPERATOR_HPP #define _Sub_OPERATOR_HPP #include"myoperator.hpp" class SubOperator:public MyOperator{ public: SubOperator(double a, double b):MyOperator(a,b){ } virtual double getResult() override{ return a-b; } }; #endif
// MyFactory 类 仅仅一个接口类 #ifndef _Sub_OPERATOR_HPP #define _Sub_OPERATOR_HPP #include"myoperator.hpp" class SubOperator:public MyOperator{ public: SubOperator(double a, double b):MyOperator(a,b){ } virtual double getResult() override{ return a-b; } }; #endif
//AddFactory 类 #ifndef _ADDFACTORY_HPP #define _ADDFACTORY_HPP #include"myfactory.hpp" #include"myoperator.hpp" #include"addoperator.hpp" class AddFactory:public MyFactory{ public: virtual MyOperator* createOperator(double a, double b)override{ return new AddOperator(a,b); } }; #endif
//SubFactory 类 #ifndef _SUB_FACTORY_HPP #define _SUB_FACTORY_HPP #include"myfactory.hpp" #include"myoperator.hpp" #include"suboperator.hpp" class SubFactory:public MyFactory{ public: virtual MyOperator* createOperator(double a, double b)override{ return new SubOperator(a, b); } }; #endif
// 客户端程序 #include<iostream> #include"addfactory.hpp" #include"subfactory.hpp" using namespace std; int main(){ AddFactory* addFa = new AddFactory(); MyOperator* myOp = addFa->createOperator(5,3); double ans = myOp->getResult(); cout << ans<<endl; // 8 MyFactory* subFa = new SubFactory(); MyOperator* subOp = subFa->createOperator(7,1); ans = subOp->getResult(); cout << ans << endl; // 6 getchar(); return 0; }
原文链接: https://www.cnblogs.com/yb-blogs/p/12509691.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/374092
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!