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

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

分析:

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

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++的抽象工厂设计模式相关推荐

  1. 用C# (.NET Core) 实现抽象工厂设计模式

    本文的概念性内容来自深入浅出设计模式一书.上一篇文章讲了简单工厂和工厂方法设计模式 使用的是披萨店的例子. 文将继续使用这个例子, 这里要用到抽象工厂. 披萨店的需求变更 现在披萨店在各地授权了很多连 ...

  2. 抽象工厂和工厂方法示例_抽象工厂设计模式示例

    抽象工厂和工厂方法示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此 ...

  3. 抽象工厂模式设计模式_抽象工厂设计模式解释

    抽象工厂模式设计模式 抽象工厂设计模式是工厂设计模式的另一种形式. 这种模式可以被视为"超级工厂"或"工厂工厂". 抽象工厂设计模式(属于"四人帮&q ...

  4. 抽象工厂设计模式示例

    本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的原因,并了解何时以 ...

  5. 抽象工厂设计模式解释

    抽象工厂设计模式是工厂设计模式的另一种形式. 这种模式可以被视为"超级工厂"或"工厂工厂". 抽象工厂设计模式(属于"四人帮"的一部分)属于 ...

  6. 设计模式之二抽象工厂设计模式

    继上篇简单工厂设计模式之后,今天继续讲解抽象工厂设计模式.在简单工厂中,我们的工厂类一次只可以处理一类产品.那么如果我们想处理多类产品,简单工厂是满足不了的.必须要用抽象工厂设计模式. 我们先从概念上 ...

  7. 创建设计模式 - 抽象工厂设计模式

    创建设计模式 - 抽象工厂设计模式 欢迎来到java示例中的Abstract Factory Design Pattern.摘要工厂设计模式是创造模式之一.抽象工厂模式几乎类似于工厂模式,除了它更像工 ...

  8. java工厂模式和抽象工厂_Java中的抽象工厂设计模式

    java工厂模式和抽象工厂 Welcome to Abstract Factory Design Pattern in java example. Abstract Factory design pa ...

  9. 工厂设计模式和抽象工厂设计模式

    工厂设计模式 1.定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使得一个类的实例化延迟到子类. --<设计模式>GoF 2.代码实现 代码背景:实 ...

最新文章

  1. 使用zerotier让异地设备组局域网
  2. How to POST JSON data with Curl from Terminal/Commandline to Test Spring REST?
  3. Android下拉刷新开源库对比(转)
  4. php调用hive,如何进行hive的简单操作
  5. Storm精华问答 | 遇到这些错误日志该如何解决?
  6. mysql哨兵机制_Redis 哨兵机制以及底层原理深入解析,这次终于搞清楚了
  7. java 图形化技术 哪个好_纳滤和反渗透技术哪个好?
  8. 洛希极限 (10 分)
  9. win10 java8 环境变量_win10下安装JDK8和环境变量配置
  10. 电脑的dwg文件怎么打开
  11. 变压器电量损耗计算及实例
  12. (015) 自动加载
  13. k线必涨的20种形态图
  14. 计算机实验报告双绞线制作,双绞线的制作实验报告.docx
  15. stl文件 python_用Python从STL文件绘制2D图像
  16. MATLAB中内置的BP神经网络函数 help newff翻译【学习笔记】
  17. 开题报告中拟解决的主要问题怎么写?
  18. mysql纯数字用什么类型_用幸运数字起名美到极致,个性又独特,你的幸运数字是什么?...
  19. 泉州水产大佬苏德义没落调查 亿万富翁变负翁
  20. 重磅发布!2018互联网女皇报告中文完整版!高清PDF下载!

热门文章

  1. fedora27 搜狗输入法配置
  2. 谷歌地图的key的获取
  3. VBA实现文本对比着色
  4. goodnote无法同步问题
  5. HTML5-常见的列表——ul,ol,dl
  6. jquery+video 鼠标滑动标签切换video中的视频资源,暂停未播放视频
  7. 100句唤醒自己的励志名言
  8. 【iMessage苹果推】准入苹果相册推苹果家庭推Apple Texter 无线平台
  9. 关于QQ总提示已被损坏或部分文件丢失解决办法
  10. 计算机教室简单画,【设计】计算机教室手绘墙画设计教程