设计模式-工厂模式

来源:互联网 发布:苏昊大数据 编辑:程序博客网 时间: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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 乐扣微波打不开怎么办 乐扣密封条发霉怎么办 橡胶牙刷柄发霉怎么办 乐扣密封条发黑怎么办 喝了姜枣茶发热怎么办 老干妈盖子太紧打不开怎么办 酵素桶变色了怎么办 酵素比例没弄好怎么办 离合器弹不起来怎么办 货车打不上气干燥器漏气怎么办 排气阀一直漏气怎么办 五个月宝宝长牙怎么办 宝宝不喜欢吃粥怎么办 孕晚期严重贫血怎么办 小孩子特别瘦该怎么办 胃病越来越瘦该怎么办 宝宝不愿吃米粉怎么办 米粉吃凉了怎么办 夏季给宝宝断奶怎么办 宝宝长牙牙痒怎么办 宝宝不喜欢吃肉怎么办 孩子不喜欢吃肉怎么办 小孩不喜欢吃肉怎么办 戒奶第二天很痛怎么办 宝宝不吃磨牙棒怎么办 金毛急性肠炎怎么办 狗狗病毒性肠炎怎么办 狗呕吐白色泡沫怎么办 甲减引起水肿怎么办 猫咪呕吐加拉稀怎么办 猫一直吐白沫怎么办 小猫吐白沫拉稀怎么办 大鳄不吃泥鳅怎么办 六个月宝宝不消化怎么办 两周岁宝宝拉稀怎么办 三岁宝宝拉肚子怎么办 混合痔老是出血怎么办 宝宝大便黑色怎么办呢 婴儿大便有粘液怎么办? 十个半月宝宝拉肚子怎么办 宝宝拉青粑粑怎么办