设计模式--工厂模式
来源:互联网 发布:中联选型软件 编辑:程序博客网 时间:2024/06/05 14:24
0x01 缘由
继续学习相关设计模式,在编程中得到进一步利用,在目前的产品开发过程中,有很多地方都用到了工厂模式。
0x02 工厂模式
“工厂”现实中的意义是按照某种工艺制造产品。那么为什么要使用工厂模式了?有什么好处?
工厂模式是一个创建型的设计模式。他允许创造对象时不指定要创建的对象的具体类型(可能就某个参数)。本质上,工厂方法是构造函数的一般化。在C++中,构造函数有如下几个限制:
没有返回值、命名限制、静态绑定创建、不允许虚构造函数。
0x03 应用场景
创建类对象虽然可以使用new(底层也是通过反射创建对象的),但是在一些情况下使用工厂模式确实最合适的。
情况一:如果一个对象拥有很多子类,那么创建该对象的子类使用工厂模式是最合适的,不但可以面向接口的编程,为维护以及开发带来方便。
情况二:如果创建某个对象时需要进行许多额外的操作,如查询数据库然后将查询到的值赋予要创建的对象(单例初始化时使用比较多),或是需要许多额外的赋值等等。如果查看JDK源码中,会发现许多成员变量在对象构造时,通过工厂方法进行创建的。因为这些成员变量本身的创建也很复杂。不可能创建对象时,在该对象的构造方法里创建成员变量然后再赋值给该成员变量。而且使用工厂模式也提高了代码的重用性。
0x04 实现抽象工厂
#include <iostream> using namespace std; //定义抽象类 class product1 { public: virtual void show() = 0; }; //定义具体类 class product_A1 :public product1 { public: void show(){ cout << "product A1" << endl; } }; class product_B1 :public product1 { public: void show(){ cout << "product B1" << endl; } }; //定义抽象类 class product2 { public: virtual void show() = 0; }; //定义具体类 class product_A2 :public product2 { public: void show(){ cout << "product A2" << endl; } }; class product_B2 :public product2 { public: void show(){ cout << "product B2" << endl; } }; class Factory { public: virtual product1 *creat1() = 0; virtual product2 *creat2() = 0; }; class FactoryA { public: product1 *creat1(){ return new product_A1(); } product2 *creat2(){ return new product_A2(); } }; class FactoryB { public: product1 *creat1(){ return new product_B1(); } product2 *creat2(){ return new product_B2(); } }; int main() { FactoryA *factoryA = new FactoryA(); factoryA->creat1()->show(); factoryA->creat2()->show(); FactoryB *factoryB = new FactoryB(); factoryB->creat1()->show(); factoryB->creat2()->show(); return 0; }
0x05 总结
使用好设计模式,会是编程更加有思路。
阅读全文
0 0
- 设计模式------工厂模式
- 设计模式------工厂模式
- 设计模式 [ 工厂模式 ]
- 设计模式--工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式 工厂模式
- 设计模式-工厂模式
- 设计模式 -- 工厂模式
- 设计模式-工厂模式
- 设计模式----工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式 - 工厂模式
- 如何配置pom.xml用maven打包java工程
- Ibatis学习总结
- selenium第一课(selenium+java+testNG+maven)
- 【资源集合帖】Android 性能测试-FPS
- hibernate插件下载
- 设计模式--工厂模式
- LVS实现负载均衡
- 数据SQL语言的深入应用
- 钉钉接口:获取accessToken和打卡记录
- 单机版redis的安装以及redis生产环境启动方案
- less用法
- spark与spring集成做web接口
- 数据SQL语言+java环境搭建
- meanshift算法学习(二):opencv中的meanshift