通过例子学设计模式之--工厂方法模式以及使用场景说明(C++实现)
来源:互联网 发布:python pillow手册 编辑:程序博客网 时间:2024/06/06 00:25
简单工厂模式有如下问题:
(1)工厂类职责不单一。比如设备类工厂,工厂一并生产USB,并口,串口,等等之类的设备,职责不单一,而且switch--case分支有可能比较多。
(2)违背开闭原则。比如设备类工厂,增加一个WIFI设备,则需要修改到工厂类的创建接口,可能会影响原有代码。
解决这2个问题,我们需要对工厂类进行抽象,抽象出创建的接口,通过多态的方法把创建延迟到子类实现,也就是工厂方法模式。
如下是类图对比(左边是简单工厂,右边是工厂方法)如下:
测试的代码和简单工厂方法类似:
class Device{public:virtual void Write() = 0;};class USB : public Device{public:void Write(){printf("USB::write...\r\n");}};class COM : public Device{public:void Write(){printf("COM::write...\r\n");}};class LPT : public Device{public:void Write(){printf("LPT::write...\r\n");}};class DeviceFactory{public:virtual Device *Create() = 0;virtual void Destory(Device* dev){if(dev){delete dev;dev = NULL;}}};class USBFactory : public DeviceFactory{public:Device *Create(){return new USB;}};class COMFactory : public DeviceFactory{public:Device *Create(){return new COM;}};class LPTFactory : public DeviceFactory{public:Device *Create(){return new LPT;}};void TestFactoryMethod(){DeviceFactory* usbF = new USBFactory;Device* usb = usbF->Create();usb->Write();usbF->Destory(usb);delete usbF;usbF = NULL;}
阅读全文
0 0
- 通过例子学设计模式之--工厂方法模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--简单工厂模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--抽象工厂模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--组合模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--原型模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--适配器模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--建造者模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--桥接模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--外观模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--单例模式以及多线程下说明(C++实现)
- C#--设计模式之工厂方法模式
- 使用Object-C实现23种设计模式之工厂方法模式
- 跟JBPM学设计模式之工厂方法模式
- 菜鸟学设计模式系列笔记之工厂方法模式
- 每天一学设计模式之工厂方法模式
- java设计模式之工厂方法模式以及简单工厂模式还有抽象工厂模式
- 设计模式之简单工厂,工厂方法模式(c++)
- 学点设计模式-工厂方法模式
- easyui图标对照
- 杂记——CSS sprites
- 1073. 多选题常见计分法(20)
- 遇到问的机器学习基本问题(2)
- PyCrypto
- 通过例子学设计模式之--工厂方法模式以及使用场景说明(C++实现)
- 最接近点对问题
- 存个图片纪念下
- 二路归并排序c语言实现
- Servlet3.0无需web.xml
- Android Studio导出Jar包
- 《R语言入门与实践》学习笔记一
- [Leetcode] 408. Valid Word Abbreviation 解题报告
- Android零基础入门第76节:Activity数据保存和横竖屏切换