c++的抽象工厂设计模式

首先工厂设计模式分好多种,简单工厂设计模式,方法工厂设计模式,抽象工厂设计模式

今天主要介绍的是抽象工厂设计模式:

分析:

        所谓工厂:用来生产产品;所谓抽象:将共同点提出来形成接口。

1》首先要有产品,产品之间会有共同的特点,所以会抽象出一个产品接口即class Product。产品也是分等级的,分一等,二等,三等等。就拿LOL中的英雄皮肤来说,我们就当英雄的皮肤是分等级(等级越高数越大)的。

2》其次是工厂的创建,工厂之间也是有共同特点的,形成工厂接口class Factory。各工厂是用来生产不同等级的产品的,同一个工厂用来生产同一等级产品的。

所以还是上代码最实在,最能体现抽象工厂模式的威力:

#include <iostream>
using namespace std;

//生产剑圣皮肤接口
class JSproduct
{
  public:
    virtual void show() = 0;
};
class JSone : public JSproduct
{
  public:
    void show() { cout << "JSone" << endl; }
};
class JStwo : public JSproduct
{
  public:
    void show() { cout << "JStwo" << endl; }
};
//剑圣增加第三个级别皮肤
class JSthr : public JSproduct
{
  public:
    void show() { cout << "JSthr" << endl; }
};

//生产猴子皮肤
class HZproduct
{
  public:
    virtual void show() = 0;
};
class HZone : public HZproduct
{
  public:
    void show() { cout << "HZone" << endl; }
};
class HZtwo : public HZproduct
{
  public:
    void show() { cout << "HZtwo" << endl; }
};


/**************************增加新的英雄,看看需要改动哪些****************************/
//一:创建新英雄(盲僧)接口类
class MSproduct
{
    public:
        virtual void show() = 0;
};
//二:实现接口,对应创建第一级皮肤
class MSone : public MSproduct
{
    public:
        void show(){cout<<"MSone"<<endl;}
};
//三:在工厂接口中增加创建盲僧的接口
//virtual MSproduct* creat3() = 0;
//四:接着在一级工厂(FactoryOne)中实例化盲僧的一级皮肤
//MSproduct* creat3(){return new MSone();}
//五:其他等级工厂中也要定义creat3()函数

/**********************************新英雄构建结束*********************************/

//生产工厂
class Factory
{
  public:
    virtual JSproduct *creat1() = 0;
    virtual HZproduct *creat2() = 0;
    virtual MSproduct* creat3() = 0;
};


class FactoryOne : public Factory
{
  public:
    JSproduct *creat1() { return new JSone(); }
    HZproduct *creat2() { return new HZone(); }
    MSproduct* creat3() { return new MSone(); }
};
class FactoryTwo : public Factory
{
  public:
    JSproduct *creat1() { return new JStwo(); }
    HZproduct *creat2() { return new HZtwo(); }
    MSproduct* creat3() { cout<<"盲僧第二级皮肤开发中..."<<endl;} //为什么没有return,没报错或者警告呢?
};

//增加一个新的皮肤等级
class FactoryThr : public Factory
{
    public:
        JSproduct *creat1() { return new JSthr(); }
        HZproduct *creat2() { cout<<"猴子第三级皮肤开发中..."<<endl;}
        MSproduct* creat3() { cout<<"盲僧第三级皮肤开发中..."<<endl;}
};





int main()
{
    FactoryOne *pfone = new FactoryOne();
    pfone->creat1()->show();
    pfone->creat2()->show();
    pfone->creat3()->show();
    FactoryTwo *pftwo = new FactoryTwo();
    pftwo->creat1()->show();
    pftwo->creat2()->show();
    pftwo->creat3();//->show();
    //增加新皮肤时,首先确定等级(这个是第三级)两个步骤->1创建产品类 >2创建第三级工厂类(注意工厂中的接口都要overwrite)
    FactoryThr *pfthr = new FactoryThr();
    pfthr->creat1()->show();
    pfthr->creat2();//->show();
    pfthr->creat3();//->show();

    return 0;
}
其中可能有一些不当的地方,请大家指正!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值