工厂模式属于创建型模式,大致可以分为简单工厂模式、抽象工厂模式。

简单工厂模式,它的主要特点是需要在工厂类中做判断,从而创造相应的产品。

  1. enum PTYPE
  2. {
  3. ProdA = ,
  4. ProdB =
  5. };
  6.  
  7. class ProductBase
  8. {
  9. public:
  10. virtual void Show() = ;
  11. };
  12.  
  13. //产品A
  14. class ProductA: public ProductBase
  15. {
  16. public:
  17. ProductA(){show();}
  18. void Show() { cout<<"Product A"<<endl; }
  19. };
  20.  
  21. //产品B
  22. class ProductB: public ProductBase
  23. {
  24. public:
  25. ProductB(){show();}
  26. void Show() { cout<<"Product B"<<endl; }
  27. };
  28.  
  29. //工厂
  30. class Factory
  31. {
  32. public:
  33. ProductBase* CreateProduct(enum PTYPE type)
  34. {
  35. if(type == ProdA)
  36. return new ProductA(); //生产A
  37. else if(type == ProdB)
  38. return new ProductB(); //生产B
  39. else
  40. return nullptr;
  41. }
  42. };

抽象工厂模式: 为一组相关的产品定义实例化,提供一系列的接口而无需去定义一些工厂类

  1. enum PTYPE
  2. {
  3. ProdA = ,
  4. ProdB =
  5. };
  6.  
  7. class ProductBase
  8. {
  9. public:
  10. virtual void Show() = ;
  11. };
  12.  
  13. //产品A
  14. class ProductA: public ProductBase
  15. {
  16. public:
  17. ProductA(){show();}
  18. void Show() { cout<<"Product A"<<endl; }
  19. };
  20.  
  21. //产品B
  22. class ProductB: public ProductBase
  23. {
  24. public:
  25. ProductB(){show();}
  26. void Show() { cout<<"Product B"<<endl; }
  27. };
  28.  
  29. class ProductBase_PLUS
  30. {
  31. public:
  32. virtual void Show() = ;
  33. };
  34.  
  35. //产品A-plus
  36. class ProductA_PLUS: public ProductBase_PLUS
  37. {
  38. public:
  39. ProductA_PLUS(){show();}
  40. void Show() { cout<<"Product A-PLUS"<<endl; }
  41. };
  42.  
  43. //产品B-plus
  44. class ProductB_PLUS: public ProductBase_PLUS
  45. {
  46. public:
  47. ProductB_PLUS(){show();}
  48. void Show() { cout<<"Product B-PLUS"<<endl; }
  49. };
  50.  
  51. class FactoryBase
  52. {
  53. public:
  54. virtual ProductBase* CreateProduct() = ;
  55. virtual ProductBase_PLUS* CreatePLUSProduct() = ;
  56. };
  57.  
  58. //工厂A
  59. class FactoryA : public FactoryBase
  60. {
  61. public:
  62. ProductBase* CreateProduct()//生产A
  63. {
  64. return new ProductA();
  65. }
  66.  
  67. ProductBase_PLUS* CreatePLUSProduct()//生产A-plus
  68. {
  69. return new ProductA_PLUS();
  70. }
  71. };
  72.  
  73. //工厂B
  74. class FactoryB : public FactoryBase
  75. {
  76. public:
  77. ProductBase* CreateProduct()//生产B
  78. {
  79. return new ProductB();
  80. }
  81.  
  82. ProductBase_PLUS* CreatePLUSProduct()//生产B-plus
  83. {
  84. return new ProductB_PLUS();
  85. }
  86. };

C++模式学习------工厂模式的更多相关文章

  1. 基于go语言学习工厂模式

    工厂模式 简单工厂模式(Simple Factory) 定义 优点 缺点 适用范围 代码实现 工厂方法模式(Factory Method) 定义 优点 缺点 适用范围 代码实现 抽象工厂模式(Abst ...

  2. 从BWM生产学习工厂模式

    工厂模式应用非常之广,在JDK底层源码以及各大主流框架中随处可见,一般以Factory结尾命名的类,比如Mybatis中的SqlSessionFactory,Spring中的BeanFactory等, ...

  3. php基础设计模式 注册树模式、工厂模式、单列模式

    废话不多说了,先给大家介绍注册树模式然后介绍工厂模式最后给大家介绍单列模式,本文写的很详细,一起来学习吧. php注册树模式 什么是注册树模式? 注册树模式当然也叫注册模式,注册器模式.之所以我在这里 ...

  4. javascript模式 (3)——工厂模式和装饰模式

    上节我们讲解了单例模式,这节我们将继续讲解工厂模式和迭代器模式 工厂模式: 工厂模式的目的是为了方便的创建对象(可以在不知道构造的情况下),通过静态方法来实现,在java或c#等静态编译语言中需要通过 ...

  5. Java中的GOF23(23中设计模式)--------- 工厂模式(Factory)

    Java中的GOF23(23中设计模式)--------- 工厂模式(Factory) 在给大家介绍工厂模式之前,我想和大家聊聊面向对象的那点事,在这里,引入三个概念. 开闭原则(Open Close ...

  6. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

  7. Java中设计模式之工厂模式-4

    一.工厂模式由来 1)还没有工厂时代:假如还没有工业革命,如果一个客户要一款宝马车,一般的做法是客户去创建一款宝马车,然后拿来用. 2)简单工厂模式:后来出现工业革命.用户不用去创建宝马车.因为客户有 ...

  8. JS 简单工厂模式,工厂模式(二)

    一.什么是工厂模式: 工厂模式就是用来创建对象的一种最常用的设计模式,我们不暴露创建对象的具体逻辑,而是将逻辑封装到一个函数中,那么,这个函数 就可以被视为一个工厂.那么,在实际项目中,我们是不是可以 ...

  9. .Net简单工厂模式,工厂模式,抽象工厂模式实例

    1.定义   简单工厂模式:是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 工厂模式:定义一个用于创建对象的接口, ...

随机推荐

  1. 使用 Python+Selenium 破解滑块验证码

    ​​开发工具 Python版本:3.6.4 相关模块: pillow模块: selenium模块: numpy模块: 以及一些Python自带的模块. 其他: chromedriver 环境搭建 安装 ...

  2. python爬取快手ios端首页热门视频

    最近快手这种小视频app,特别的火,中午吃过午饭,闲来无聊,想搞下快手的短视频,看能不能搞到. 于是乎, 打开了fiddler,开始准备抓包, 设置代理,重启,下一步,查看本机ip 手机打开网络设置 ...

  3. linux 利用cat写入一段文件

    linux 利用cat写入一段文件 cat >> /etc/rc.local <<EOFsysctl -w net.ipv4.icmp_echo_ignore_all=1sys ...

  4. C++将一个vector中的内容复制到另一个vector结尾

    在使用vector容器的时候,需要将一个vector中的内容复制到另一个vector结尾,如何实现呢? 使用vector的insert方法 template <class InputIterat ...

  5. TensorFlow Python3.7环境下的源码编译(三)编译

    这里要为仅支持 CPU 的 TensorFlow 构建一个 pip 软件包,需要调用以下命令: $ bazel build --cxxopt="-D_GLIBCXX_USE_CXX11_AB ...

  6. tensorflow-gpu在win10下的安装

    参考:https://blog.csdn.net/gyp2448565528/article/details/79451212 按照原博主的方法在自己的机器上会有一点小错误,下面的方法略有不同 环境: ...

  7. php从入门到放弃系列-01.php环境的搭建

    php从入门到放弃系列-01.php环境的搭建 一.为什么要学习php 1.php语言适用于中小型网站的快速开发: 2.并且有非常成熟的开源框架,例如yii,thinkphp等: 3.几乎全部的CMS ...

  8. P4562 [JXOI2018]游戏

    题面 题目描述 她长大以后创业了,开了一个公司. 但是管理公司是一个很累人的活,员工们经常背着可怜偷懒,可怜需要时不时对办公室进行检查. 可怜公司有 \(n\) 个办公室,办公室编号是 \(l\) 到 ...

  9. Python3中的函数 大全

    Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print().但也可以自己创建 ...

  10. bash登录过程 其实还不太了解,先码后看

    在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile. ~/.bash_login或 ~/.profile文件中的其中一个,执行的顺序 ...