layout: post title: 设计模式(一) 简单工厂模式 tags:

  • Design_Patterns categories:
  • Design_Patterns description: 我一直认为编程思想源于生活,很多一起学习的同学,总是有疑惑,我学的这些东西到底有什么用? 如果能举个例子,引入一定场景和故事.他们或许就很快明白了! 我很喜欢刘欣的<<码农翻身>> 用故事给技术加点料! 他是我学习的榜样 问题故事化!!!

设计模式(一) 简单工厂模式

1. 引子

我一直认为编程思想源于生活,很多一起学习的同学,总是有疑惑,我学的这些东西到底有什么用? 如果能举个例子,引入一定场景和故事.他们或许就很快明白了! 我很喜欢刘欣的<<码农翻身>> 用故事给技术加点料! 他是我学习的榜样 问题故事化!!!

2. 故事继续...

很不幸 我需要大费周章的和我的同事解释什么是工厂模式?

很多类都有什么什么XXXFactory类 通常按照尿性还有一个createXXX()

比如我们的 阿里爸爸的Druid DruidDataSourceFactory.createDataSource(); 等等.

其实这就有工厂模式的体现,

工厂模式分为三种

  1. 简单工厂模式
  2. 工厂模式
  3. 抽象工厂模式

3. 简单工厂模式

先来个官方的解释:

简单工厂模式:简单工厂模式其实不能算是一个设计模式,反而比较像一种编程习惯..............(省略300字)

我对工厂模式的理解源于我自己,编程只是我的副业 我其实是开火锅店的,哈哈哈

4. 我的火锅店

家族流传的手艺 祖传的火锅底料制作秘方 是我开火锅店的资本

开始我这边只是一个小店 我一直使用祖传的一套秘方经营着我的小店 很幸运 大家的反响很好 刚开业不到3个月,大家的口口相传 让我的火锅店生意火爆 很多周边城市的人们涌向这座小县城 只为那舌尖上的一丝快感......

日益增多的客流量 让我们每天的经营都是一次挑战 但是我作为这家店的主人 依旧自信满满 大学学习的erp课程 让我有一套优秀的管理方案 这套方案将会一直沿用 但是客人越来越多 口味也越来越多 我家的牛肉味火锅已经不能满足大众的口味了 最近肯德基推出怀旧系列 嫩牛五方 可口可乐推出了樱桃口味的可乐 网上火起来的华农兄弟让大家知道了竹鼠 前几天还有客人问我是否有竹鼠火锅........

必须添加新的菜品! 不作出改变就得迎来死亡!

于是我们按照顾客的要求添加了很多新的口味火锅,有牛肉火锅,羊肉火锅,菌菇火锅,.........当然还有竹鼠火锅 于是现在的火锅店成了这样: 方形为类

graph RL; shop[MyStore<br/>1.优秀的管理方法]; id[BeefHuoguo]-->shop; id2[LambHuoguo]-->shop; id3[BambooRatHuoguo]-->shop; id4[.....]-->shop;

当然我是一个熟悉OO思想的人----找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起

对于火锅的制作 有很多重复的操作 比如加汤 加油 加入 调料包 加热等等 我把这些公共的步骤写在墙上 大家都按这个操作步骤来就可以了

所以我们可以把这些相同的部分抽象出来:

圆形为抽象类

graph RL; abstract((Huoguo<br/>1.加油方法<br/>2.加调料方法<br/>3.加热方法))-->shop[MyStore<br/>1.优秀的管理方法]; id[BeefHuoguo]-.->abstract; id1[LambHuoguo]-.->abstract; id3[BambooRatHuoguo]-.->abstract; id4[.....]-.->abstract;

于是我们有了一层抽象类-----火锅 这些都是汤底的种类,子类有自己的实现 而重复的方法从父类继承

5. 工厂的加入

为了进一步加快速度 跟上信息化时代 同时减少开支 减少那些制作火锅的大妈们 我让我机械系的同学小王 连夜赶制了一台机器 用来制作火锅底料 这台机器只需要输入需要的火锅类型 他就可以生产出火锅!我把这个机器叫做HuoguoFactory

实现如下:

public class HuoguoFactory{public Huoguo createHuoguo(String name){   //拿到火锅的方法Huoguo huoguo = null;if(name.equals("BeffHuoguo")){huoguo = new BeffHuoguo();}else if(name.equals("LambHuoguo")){huoguo = new LambHuoguo();}else if(name.equals("BambooRatHuoguo")){huoguo = new BambooRatHuoguo();}......return huoguo;}
}

现在的工作流程是这样了: 虚线为继承/实现关系

graph RL; HuoguoFactory[HuoguoFactory<br/>内部维护一个方法用来向使用者返回Huoguo]-->shop[MyStore<br/>内部有一个HuoguoFactory的引用<br/>1.优秀的管理方法]; abstract((Huoguo<br/>1.加油方法<br/>2.加调料方法<br/>3.加热方法))-->HuoguoFactory id[BeefHuoguo]-.->abstract; id1[LambHuoguo]-.->abstract; id3[BambooRatHuoguo]-.->abstract; id4[.....]-.->abstract;

6. 简单工厂模式

好了 这就是我火锅店的现状

拥有了一台生产不同火锅的机器-----火锅工厂

这就是我理解的简单的工厂模式:

简单工厂有一个Factory工厂实体类,我们可以直接将参数交给工厂类,而不需要针对具体类new 对象 工厂类相当于对不同实现类对象创建了一个抽象层,对使用者来说是透明的(比如对于火锅店主的我 我根本不需要知道火锅工厂内部是怎么工作的 我只知道输入一个火锅名字 3分钟后就会有一盆香喷喷的火锅产出 端给客人就好了) 去除了对类实现的依赖,所以在一定程度上实现了解耦!

对于火锅店的管理者 也就是我 如果没有小王提供的火锅机器 没有这个缓冲层 我就需要在工厂的使用者MyStore中判断创建那种火锅 管理火锅店的事情和制作火锅的步骤都由我这个店长控制 太麻烦了 我只想专注我的管理 所以利用火锅工厂 将这个业务分离出去 这样我就可以一心的分配我的员工干活了 该接待的接待 该打扫的打扫 火锅制作就不需要操心了!!!

转载于:https://www.cnblogs.com/Tamako/p/10859678.html

设计模式(一) 简单工厂模式相关推荐

  1. php的类图怎么生成_PHP设计模式之简单工厂模式

    PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...

  2. C#设计模式(2)——简单工厂模式

    一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂 ...

  3. 工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)

    简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧.为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习. 1  场景问题 ...

  4. .NET设计模式(1): 简单工厂模式

    .NET设计模式(1): 简单工厂模式 最近一直在看设计模式,想把自己的学习笔记与大家分享一下,如果能帮助大家的话,我会非常高兴,同时也欢迎大家指出里面的不足.园子里其实关于此类文章已经很多了,如果d ...

  5. JS常用的设计模式(2)——简单工厂模式

    JS常用的设计模式(2)--简单工厂模式 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定 ...

  6. 设计模式之简单工厂模式(C#版)

    设计模式之简单工厂模式(C#版) 简介 假设有个女朋友 总结 简介 我用最简洁而直接的方式来描述一下,什么是简单工厂模式.一句话就是,工厂类使用switch case语句返回特定类型. 下面,我们用一 ...

  7. 大牧絮叨设计模式:简单工厂模式

    文章目录 1. 简单工厂模式概述 1.1.简单工厂模式核心组件 1.2.简单工厂模式优缺点 2.` Java`实现 公共父类定义 产品具体实现类 简单工厂定义 代码运行测试: 3. `Python`实 ...

  8. 设计模式之简单工厂模式(Java 实现)

    设计模式之简单工厂模式(Java 实现) 本文首发于http://www.imooc.com/wiki/Designlesson/factory.html 简单工厂模式是平时开发过程中最常见的设计模式 ...

  9. 设计模式之简单工厂模式

    一.概述 工厂模式具体包括了简单工厂.工厂方法.抽象工厂,它们是按照从简单到复杂的顺序排列的,属于设计模式中的创建型,其中简单工厂并不属于GOF的23中模式.   但是它是理解其它的工厂模式的一个很好 ...

  10. 设计模式之简单工厂模式(Simply Factory)摘录

    从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种 ...

最新文章

  1. DCN-s4600 ssh服务登录配置:
  2. 硬盘运行时断电会导致硬盘怎样
  3. 电脑硬件故障的几种简单检查方法
  4. 确保企业的大数据投资达到预期的5种方法
  5. Java高并发程序设计(六)--线程池(1)
  6. 牛客题霸 [字符串变形]C++题解/答案
  7. CentOS7桌面版系统使用的一些小技巧
  8. python里元组和列表的共同点和不同点_Python元组与列表的相同点与区别
  9. 选择AWS或Azure?这可能是个错误的问题
  10. 密码编码学初探——数论和有限域
  11. bouncing results问题
  12. PHP Imagick发光文字
  13. DOC文档转换成WPS格式要怎样操作
  14. 拼团小程序源码_微信小程序拼团系统为什么很多商家开发
  15. 2021.8-机器学习地震信号去噪和到时识取环境配置
  16. x390yoga 关掉触控屏幕_八代酷睿变形金刚:ThinkPad X390 Yoga变形本带你飞
  17. NDIS(NDIS开发详解)
  18. 快速下载“阿里云镜像网站“Centos各个版本 全流程
  19. 电脑派位系统(新生入学摇号) v2016
  20. 雅马哈机器人拆分视觉字符串

热门文章

  1. 在邮箱中用html写邮件
  2. 百度地图API仿链家地图找房 聚合开发 js实现
  3. 微信openid你了解多少?appid,appsecert又是啥?
  4. 容易的计算机科技核心期刊,计算机类容易中的期刊
  5. axure sketch 对比_Sketch 画原型比 Axure 好用吗?为什么
  6. python滤波器处理数据的优点_使用Python对原始信号应用合适的butterworth滤波器
  7. Windows Server 2008打印服务器安装与配置
  8. 资源利用率提高67%,腾讯实时风控平台云原生容器化之路
  9. 2016 server win 假死_Win7运行程序无缘无故发生假死现象五种解决方法
  10. 技巧8——linux假死现象要知道