设计模式-工厂模式
来源:互联网 发布:苏昊大数据 编辑:程序博客网 时间:2024/05/16 08:14
工厂模式,核心思路是将对象的实例化操作封装在一个工厂类,所有的对象都必须由这个“工厂”生产,巧妙地避免了满大街地出现new xxx()这种代码。
工厂模式有三种:简单工厂模式、方法工厂模式、抽象工厂模式。
简单工厂模式:
__interface IFruite{public: virtual void Show()=0;};class CApple :public IFruite{public: virtual void Show() { cout << "I'm an Apple" << endl; }};class CPear :public IFruite{public: virtual void Show() { cout << "I'm a Pear" << endl; }};class CWatermelon :public IFruite{public: virtual void Show() { cout << "I'm a Watermelon" << endl; }};class CFruitFactory{public: enum Fruite_Type { FRUITE_APPLE, FRUITE_PEAR, FRUITE_WATERMELON };public: static IFruite* CreateFruite(Fruite_Type eType) { IFruite* pFruite = NULL; switch (eType) { case FRUITE_APPLE: pFruite = new CApple(); break; case FRUITE_PEAR: pFruite = new CPear(); break; case FRUITE_WATERMELON: pFruite = new CWatermelon(); break; default: break; } return pFruite; }};
简单工厂模式的实现较为简单,只有一个水果工厂类,所有的水果生产过程都必须由这个水果工厂生产,工厂类内部用一个switch分支判断具体生产哪一种水果。
如果现在要增加一种水果,比如香蕉。除了增加一个香蕉类,还得必须修改工厂类,这就违背了开放封闭原则。
开放-封闭原则: 软件实体(类、模板、函数等等)可以扩展,但是不可以修改
方法工厂模式:
__interface IFruite{public: virtual void Show()=0;};class CApple :public IFruite{public: virtual void Show() { cout << "I'm an Apple" << endl; }};class CPear :public IFruite{public: virtual void Show() { cout << "I'm a Pear" << endl; }};class CWatermelon :public IFruite{public: virtual void Show() { cout << "I'm a Watermelon" << endl; }};__interface IFactory{public: virtual IFruite* CreateFruite() = 0;}; class CAppleFactory :public IFactory{public: virtual IFruite* CreateFruite(){ return new CApple();}};class CPearFactory :public IFactory{public: virtual IFruite* CreateFruite(){ return new CPear();}};class CWatermelonFactory :public IFactory{public: virtual IFruite* CreateFruite(){ return new CWatermelon(); }};
方法工厂模式符合开放-封闭原则:如果再增加一个香蕉类型,则需要增加一个香蕉类,和一个香蕉工厂类,而不需要修改任何类或函数。
但是,方法工厂模式为每一种水果都定义了一个工厂类,相比于简单工厂模式,工厂方法模式更容易造成类的泛滥。
最后,附上完整代码:
http://pan.baidu.com/s/1skBqnSx
0 0
- 设计模式------工厂模式
- 设计模式------工厂模式
- 设计模式 [ 工厂模式 ]
- 设计模式--工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式 工厂模式
- 设计模式-工厂模式
- 设计模式 -- 工厂模式
- 设计模式-工厂模式
- 设计模式----工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式 - 工厂模式
- Debian/Ubuntu下修复华硕笔记本的Wifi
- [BZOJ2599][IOI2011]Race 树分治
- 设计模式之代理模式(java)
- JS--网站统计中的数据收集原理及实现
- 5.LCD驱动调用方法以及按键函数编写—基于CT117E开发板的STM32库函数编程
- 设计模式-工厂模式
- ucosii 任务的堆栈使用情况检查函数OSTaskStkChk()的应用方法
- NYOJ273 - 字母小游戏
- 后缀数组
- 负责任有担当
- 1041. 考试座位号(15)
- 『 Jack_a_Lent_Notes』---功率因数校正(APFC)
- Day 10-02 cookie
- Android缓存技术,完美结合LruCache和DiskLruCache