设计模式中几个工厂模式的比较——餐馆的故事
来源:互联网 发布:protobuf.js 教程 编辑:程序博客网 时间:2024/04/27 22:00
初读 Learning Hard大神的作品(C#设计模式总结 - Learning hard - 博客园),略有感触。对创建型模式中的简单工厂模式、工厂方法模式和抽象工厂模式这三个既有共性又有区别的模式加以比较,想出了一则生动有趣的故事以比喻之。在此与大家分享。
最初,在小城里还没有餐馆,人们只能自己动手做饭吃。而自己做饭不专业,也没有效率,也麻烦。正如没有任何工厂类的时候,客户端只能自己去创建类,每个不同的客户端都这么创建类,自然就有很多重复的代码,而且容易出错。
之后小城里有了餐馆,人们只要进去点菜,就可以吃到自己想要的菜。这个餐馆就是一个简单工厂类,客户端只要传进去一个参数表示自己想要的类,简单工厂就会返回这个类,这样客户端就轻松很多。
随着餐馆的生意越来越好,来小城的食客也越来越多,食客要求的菜品也越来越多有要川菜、粤菜、鲁菜等等,餐馆不得不去招聘各种各样的厨师来满足这些需求。然而,样样精,就是样样都不精。正如餐馆出现之前,人们自己做饭,不专业、没效率、麻烦,一个包罗杂七杂八厨师的餐馆也必然是不专业、没效率、混乱。正如一个简单工厂类,当其需要产出的产品类过多时,其内部结构也会复杂混乱。
这个时候,小城里陆续有了其他餐馆。没错!他们继承自餐馆,但是它们是川菜馆、粤菜馆、鲁菜馆等。这个时候食客们发现这些新餐馆比原来的那个老餐馆更加专业,只做一个菜系。因此这些新餐馆变得更受欢迎。更可喜的是即使有一些老外慕名来到小城,他们也可以去街上新开的那家KFC而不会影响到其他餐馆。这就是工厂方法模式带来的好处,一个抽象工厂随时可以按照客户端的需求去实现一个新的工厂类来产生新的产品类来满足客户端新的要求。
在小城里的一群老陕,最爱吃一家凉皮店的肉夹馍+凉皮+冰峰,因为这个组合有凉有热、有吃有喝、有肉有菜。这天他们决定换换口味,去了家川菜馆。拿到菜单之后,他们傻了眼,虽然可以想点哪个点哪个,但是他们并不清楚这些菜是用什么原料,是什么味道。最后瞎点一通,吃完不欢而散。即使他们可以咨询其他人和店老板,对他们来说也比较麻烦是一种负担。正如工厂方法模式可以按客户端需求去创造产品类,但是还需要客户自己去识别要产生哪些类,还要确定这些类的关系,甚是麻烦。
为了解决这一问题,小城的餐馆老板们聚在一起,根据各自的拿手好菜,讨论抽象出了一个人人都爱的食物模式:有凉有热、有吃有喝、有肉有菜。按照这个标准每家餐馆都制定了自己的套餐来满足这个标准。这下食客们可幸福了,他们只要选择一家自己想要的餐馆进去,就可以享受到满足最佳食物模式的套餐,而不必纠结于具体点什么。这就是抽象工厂模式的好处,抽象工厂定义出了一个产品族及其关系以满足客户需求,那么按照这个定义出来的产品一定会满足客户端的需要。而客户端只需要选择一个产品族就可以,轻松愉快!
- 设计模式中几个工厂模式的比较——餐馆的故事
- 设计模式--工厂模式(一个关于工厂的故事)
- 设计模式——抽象工厂模式及在jdk中的应用+几种工厂模式的比较
- 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较
- 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较
- 职责链模式(Chain of Responsibility Pattern)-餐馆的故事
- 【设计模式】——工厂比较
- java的设计模式——工厂
- 工厂的设计模式
- Java中常见的设计模式之工厂设计模式
- C#的设计模式——工厂模式
- 【设计模式】——日本队的简单工厂模式
- 《大话设计模式》——工厂模式的逐步升级
- 设计模式的学习——工厂模式
- 设计模式——简单的工厂模式
- java的设计模式——几种工厂模式
- 设计模式学习小结——第一篇 原则和工厂的比较
- 设计模式—浅析三种工厂模式的特点
- Windows下IIS+PHP5.3.x zend guard loader 的配置方法
- 如何找回Oracle中system,sys用户的密码
- authentication failure
- MYSQL Communications link failure,The last packet successfully received from the server was
- MVC 在 Application_Error中定义错误
- 设计模式中几个工厂模式的比较——餐馆的故事
- Android 入门之 安装镜像 (鉴于国内Google相关很多服务都无法访问)
- winform 两个窗体之间来回传值/相互传值
- 移动单元格
- mac 开发工具
- DRM in Android
- android之自定义SimpleCursorAdapter的使用
- Android之Service
- OpenStack部署工具总结