设计模式中几个工厂模式的比较——餐馆的故事

初读 Learning Hard大神的作品(C#设计模式总结 - Learning hard - 博客园),略有感触。对创建型模式中的简单工厂模式、工厂方法模式和抽象工厂模式这三个既有共性又有区别的模式加以比较,想出了一则生动有趣的故事以比喻之。在此与大家分享。

  最初,在小城里还没有餐馆,人们只能自己动手做饭吃。而自己做饭不专业,也没有效率,也麻烦。正如没有任何工厂类的时候,客户端只能自己去创建类,每个不同的客户端都这么创建类,自然就有很多重复的代码,而且容易出错。

  之后小城里有了餐馆,人们只要进去点菜,就可以吃到自己想要的菜。这个餐馆就是一个简单工厂类,客户端只要传进去一个参数表示自己想要的类,简单工厂就会返回这个类,这样客户端就轻松很多。

  随着餐馆的生意越来越好,来小城的食客也越来越多,食客要求的菜品也越来越多有要川菜、粤菜、鲁菜等等,餐馆不得不去招聘各种各样的厨师来满足这些需求。然而,样样精,就是样样都不精。正如餐馆出现之前,人们自己做饭,不专业、没效率、麻烦,一个包罗杂七杂八厨师的餐馆也必然是不专业、没效率、混乱。正如一个简单工厂类,当其需要产出的产品类过多时,其内部结构也会复杂混乱。

  这个时候,小城里陆续有了其他餐馆。没错!他们继承自餐馆,但是它们是川菜馆、粤菜馆、鲁菜馆等。这个时候食客们发现这些新餐馆比原来的那个老餐馆更加专业,只做一个菜系。因此这些新餐馆变得更受欢迎。更可喜的是即使有一些老外慕名来到小城,他们也可以去街上新开的那家KFC而不会影响到其他餐馆。这就是工厂方法模式带来的好处,一个抽象工厂随时可以按照客户端的需求去实现一个新的工厂类来产生新的产品类来满足客户端新的要求。

  在小城里的一群老陕,最爱吃一家凉皮店的肉夹馍+凉皮+冰峰,因为这个组合有凉有热、有吃有喝、有肉有菜。这天他们决定换换口味,去了家川菜馆。拿到菜单之后,他们傻了眼,虽然可以想点哪个点哪个,但是他们并不清楚这些菜是用什么原料,是什么味道。最后瞎点一通,吃完不欢而散。即使他们可以咨询其他人和店老板,对他们来说也比较麻烦是一种负担。正如工厂方法模式可以按客户端需求去创造产品类,但是还需要客户自己去识别要产生哪些类,还要确定这些类的关系,甚是麻烦。

  为了解决这一问题,小城的餐馆老板们聚在一起,根据各自的拿手好菜,讨论抽象出了一个人人都爱的食物模式:有凉有热、有吃有喝、有肉有菜。按照这个标准每家餐馆都制定了自己的套餐来满足这个标准。这下食客们可幸福了,他们只要选择一家自己想要的餐馆进去,就可以享受到满足最佳食物模式的套餐,而不必纠结于具体点什么。这就是抽象工厂模式的好处,抽象工厂定义出了一个产品族及其关系以满足客户需求,那么按照这个定义出来的产品一定会满足客户端的需要。而客户端只需要选择一个产品族就可以,轻松愉快!

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计,皆可应用在项目、毕业设计、课程设计、期末/期/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值