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;
}
其中可能有一些不当的地方,请大家指正!
c++的抽象工厂设计模式相关推荐
- 用C# (.NET Core) 实现抽象工厂设计模式
本文的概念性内容来自深入浅出设计模式一书.上一篇文章讲了简单工厂和工厂方法设计模式 使用的是披萨店的例子. 文将继续使用这个例子, 这里要用到抽象工厂. 披萨店的需求变更 现在披萨店在各地授权了很多连 ...
- 抽象工厂和工厂方法示例_抽象工厂设计模式示例
抽象工厂和工厂方法示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此 ...
- 抽象工厂模式设计模式_抽象工厂设计模式解释
抽象工厂模式设计模式 抽象工厂设计模式是工厂设计模式的另一种形式. 这种模式可以被视为"超级工厂"或"工厂工厂". 抽象工厂设计模式(属于"四人帮&q ...
- 抽象工厂设计模式示例
本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的原因,并了解何时以 ...
- 抽象工厂设计模式解释
抽象工厂设计模式是工厂设计模式的另一种形式. 这种模式可以被视为"超级工厂"或"工厂工厂". 抽象工厂设计模式(属于"四人帮"的一部分)属于 ...
- 设计模式之二抽象工厂设计模式
继上篇简单工厂设计模式之后,今天继续讲解抽象工厂设计模式.在简单工厂中,我们的工厂类一次只可以处理一类产品.那么如果我们想处理多类产品,简单工厂是满足不了的.必须要用抽象工厂设计模式. 我们先从概念上 ...
- 创建设计模式 - 抽象工厂设计模式
创建设计模式 - 抽象工厂设计模式 欢迎来到java示例中的Abstract Factory Design Pattern.摘要工厂设计模式是创造模式之一.抽象工厂模式几乎类似于工厂模式,除了它更像工 ...
- java工厂模式和抽象工厂_Java中的抽象工厂设计模式
java工厂模式和抽象工厂 Welcome to Abstract Factory Design Pattern in java example. Abstract Factory design pa ...
- 工厂设计模式和抽象工厂设计模式
工厂设计模式 1.定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使得一个类的实例化延迟到子类. --<设计模式>GoF 2.代码实现 代码背景:实 ...
最新文章
- 使用zerotier让异地设备组局域网
- How to POST JSON data with Curl from Terminal/Commandline to Test Spring REST?
- Android下拉刷新开源库对比(转)
- php调用hive,如何进行hive的简单操作
- Storm精华问答 | 遇到这些错误日志该如何解决?
- mysql哨兵机制_Redis 哨兵机制以及底层原理深入解析,这次终于搞清楚了
- java 图形化技术 哪个好_纳滤和反渗透技术哪个好?
- 洛希极限 (10 分)
- win10 java8 环境变量_win10下安装JDK8和环境变量配置
- 电脑的dwg文件怎么打开
- 变压器电量损耗计算及实例
- (015) 自动加载
- k线必涨的20种形态图
- 计算机实验报告双绞线制作,双绞线的制作实验报告.docx
- stl文件 python_用Python从STL文件绘制2D图像
- MATLAB中内置的BP神经网络函数 help newff翻译【学习笔记】
- 开题报告中拟解决的主要问题怎么写?
- mysql纯数字用什么类型_用幸运数字起名美到极致,个性又独特,你的幸运数字是什么?...
- 泉州水产大佬苏德义没落调查 亿万富翁变负翁
- 重磅发布!2018互联网女皇报告中文完整版!高清PDF下载!