您的位置:首页 > 编程语言 > C语言/C++

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

2018-03-31 14:42 302 查看
首先工厂设计模式分好多种,简单工厂设计模式,方法工厂设计模式,抽象工厂设计模式
今天主要介绍的是抽象工厂设计模式:
分析:
        所谓工厂:用来生产产品;所谓抽象:将共同点提出来形成接口。
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;
}其中可能有一些不当的地方,请大家指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息