1 工厂模式逻辑图

第一篇:工厂模式1

1.1 简单工厂模式

1.2 工厂模式


注:一个具体工厂只能生产一个产品;

1.3抽象工厂模式


注:一个具体工厂可以生产多个个产品;

2工厂模式改进

2.1 工厂模式缺点

  1. 简单工厂模式在新增加产品的时候需要去修改工厂类,违反了开闭原则
  2. 工厂模式以及抽象工厂模式在增加产品的时候需要去增加一个新的产品类,加大了代码量;

2.2 工厂模式改进

模板类工厂
(参考:工厂模式进阶)

具体思路:依旧是抽象工厂的组成形式(具体产品,抽象产品,具体工厂,抽象工厂)
结构图如下:

代码实例:
产品类(具体产品以及抽象产品)

#pragma once
#include<iostream>
#include<string>
using namespace std;
class close
{public:virtual void show() = 0;virtual void printName() = 0;virtual ~close(){}
};class NikeClose: public close
{public:NikeClose(){printName();}~NikeClose(){std::cout << "Nike衣服GG" << endl;}void printName(){std::cout << "Nike衣服起来了!!" << endl;}void show(){std::cout << "Nike衣服牛逼" << endl;}};class shoes
{public:virtual void show() = 0;virtual void printName() = 0;virtual ~shoes(){}
};class LiNingShose : public shoes
{public:LiNingShose(){printName();}~LiNingShose(){std::cout << "LN鞋子GG" << endl;}void printName(){std::cout << "LN鞋子起来了!!" << endl;}void show(){std::cout << "LN鞋子牛逼" << endl;}};

工厂类代码(使用模板类)

template<class Abs_Porduct>
class Abs_factory
{public:virtual Abs_Porduct* Create()=0;virtual ~Abs_factory(){}
};template<class Abs_Porduct,class real_product>//定义一个抽象产品,以及一个具体产品类
class real_factory :public Abs_factory<Abs_Porduct>
{public:real_factory(){std::cout << "好起来了" << endl;}Abs_Porduct* Create(){return new real_product();}~real_factory(){std::cout << "坏起来了" << endl;}};

客户端主程序:

#include<iostream>
#include<string>
#include"factory.h"
using namespace std;
int main()
{real_factory<close, NikeClose> nike_factory;close*pnikeClo = nike_factory.Create();if (pnikeClo){pnikeClo->show();delete pnikeClo;pnikeClo = NULL;}real_factory<shoes, LiNingShose> LN_factory;shoes*pLNshoes = LN_factory.Create();if (pLNshoes){pLNshoes->show();delete pLNshoes;pLNshoes = NULL;}return 0;}

运行结果

总结:由此代码可以得出:在我们需要添加一个新产品的时候,我们只需要添加一个具体产品的类,不用去修改工厂类的代码,同时也需要去添加一条具体的工厂线;

设计模式--工厂类进阶相关推荐

  1. 设计模式之工厂类模式总结对比、简单工厂模式、工厂方法模式、抽象工厂模式、带反射的工厂模式、例子代码分析、最详细

    1. 题目 假设某公司同时用SqlServer.MySql数据库,即会切换两数据库(不同数据库的sql语句有些许差异),同时,两数据库里均有对Users.Departments表的操作(sql代码不一 ...

  2. Java设计模式(方法工厂类、单例模式、代理模式、策略模式、适配器、观察者、装饰类等)

    目录 一.简单工厂模式(Factory Method) 二.工厂方法模式 三.抽象工厂模式(Abstract Factory) 3.1 三个工厂模式区别: 四.单例模式(Singleton) 1.饿汉 ...

  3. php 抽象工厂类实例,PHP设计模式之抽象工厂

    这篇文章介绍的内容是关于PHP设计模式之抽象工厂 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 在学习过工厂方法之后,我所了解的工厂方法基本是去创建一个对象, 例如在玩游戏的时候,创 ...

  4. java 用映射写工厂类_java23种设计模式——三、工厂模式

    目录 工厂模式 工厂模式介绍 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式.著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见.因为 ...

  5. 【Java萌新】面试常问设计模式——工厂模式

    临近秋招,备战暑期实习,祝大家每天进步亿点点!Day17 本篇总结的是 工厂设计模式,后续会每日更新~ 1.工厂模式简介 ⼯⼚模式介绍:它提供了⼀种创建对象的最佳⽅式,在创建对象时 不会对客户端暴露创 ...

  6. android工厂模式源码,Android源码设计模式——工厂模式

    工厂模式也是为了构建一个新的对象,它是创建型模式的一种. Android源码设计模式--Build模式(应用:AlertDialog源码分析) 上述是之前的Build模式,也是创建型模式一种,不懂的小 ...

  7. 我是架构师-设计模式-工厂模式-工厂方法

    有款游戏叫模拟人生,我这里就例子就叫北漂人生吧. 北漂人生 规定安家模式 a.结婚 b.买房 c. 买车 d. 生娃 先看几种情况: 1. 我初来帝都,按照北漂人生规则,如果要安家,要遵守 a. 结婚 ...

  8. Go --- 设计模式(工厂模式)

    简易工厂主要是用来解决对象"创建"的问题.以下的例子取自<大话设计模式>中第一章,实现一个可扩展的"计算器".当增加新的功能时,并不需改动原来已经实 ...

  9. java 工厂模式的写法_[java设计模式] 工厂模式解析

    什么是工厂模式? 我的总结是: 遵守软件设计中的开闭原则和依赖反转原则, 并且客户端只需通过参数来创造多个对象, 并且在创建过程中,创建对象的过程对客户端是透明的. 这种开发模式叫做工厂模式. 出现原 ...

最新文章

  1. python 正则的使用 —— 编写一个简易的计算器
  2. java join yield_Java多线程中join、yield、sleep方法详解
  3. 基本功 | Java即时编译器原理解析及实践
  4. python打包和添加数据文件_Python打包时添加非代码文件的坑
  5. MySQL中Join算法实现原理通俗易懂
  6. perl里q,qq,qw等的用法
  7. Python之动态网页爬虫方案介绍及selenium+chrome详解
  8. 怎样修改计算机系统8,win8改win7,教您win8怎么改为win7系统
  9. Linux vim字符串替换
  10. 中科院阿里云发布11比特云超导量子处理器
  11. web前端——qq登录界面
  12. 简谈计算机网络与网络编程
  13. insmod与modprobe命令的区别及其相关命令
  14. access阿里云 mysql_access数据库字段最大
  15. 韩金融研究院院长:加密托管是市场增长的关键
  16. 应用之星教你制作电子书(包括图文电子书),与技术无关
  17. Linux系统打包QT程序
  18. 【codeforces 776B】Sherlock and his girlfriend
  19. 大数据——Java I/O输入输出处理(二)
  20. 首师大计算机技术报考人数,2020首都师范大学招生计划及人数

热门文章

  1. 自制CA证书,自制客户端,服务端证书
  2. 部分html转成pdf,4个把HTML转成PDF的实现方案
  3. 通过Yahoo API 获取实时货币汇率
  4. 超酷flash光晕移动效果
  5. vue:时间选择器自定义时间可选范围
  6. C# winform获取当前屏幕dpi缩小缩放比例
  7. 计算机事业单位专技岗评职称,事业单位如何申报职称?这些你需要了解!
  8. 倾听心声,大数据让银行淘到真金
  9. java 购买电影票_java电影票预售管理系统
  10. 安卓网apk安装器_手机也能安装“安卓虚拟机”?原来还有这种骚操作!