![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
半岛铁盒里的猫
一个热爱足球和音乐,带有一定程度文艺气息的主流程序员。
展开
-
调侃《HeadFirst设计模式》之装饰者模式
今天让我们继续跟随《Head First 设计模式》的足迹,聊一个新的设计模式,有了它,你将能够在不修改任何底层代码的情况下,给你的(或别人的)对象赋予新的职责。首先,按照惯例,从故事说起—— 星巴兹(Starbuzz)是以扩张速度最快而闻名的咖啡连锁店。因为扩张速度实在太快了,他们准备更新订单系统,以合乎他们的饮料供应要求。他们原先的类设计是这样的…… cost方法是原创 2015-04-05 10:52:48 · 2283 阅读 · 0 评论 -
调侃《First head 设计模式》之状态模式篇
现在有个糖果控制器,它的运行状态图如下: 我们要用java来实现这个糖果控制器。首先需要用一些实例变量来表示不同的状态: 我们的思路是创建一个糖果控制器类,它就像一个状态机,每个可能的操作都创建一个方法,在这些方法内部对当前状态进行判断,并做出相应的反应。 由于这并不难理解,所以直接上代码(有点长):原创 2015-05-24 10:42:45 · 1731 阅读 · 0 评论 -
调侃《Head First设计模式》之迭代器和组合模式(二)
在上一篇调侃《Head First设计模式》之迭代器和组合模式(一)主要讲了用类封装集合或者数组的迭代器,使得客户端可以方便遍历集合数组元素提高程序的可扩展性。这次继续按照它的故事,引入新的模式:组合模式。 之前菜单的结构是一个菜单包含着几个菜单项,但现在业务需要,菜单中也要包含子菜单(如下图),那该如何实现方便呢? 看,餐厅菜单中又包含着甜点菜单。这样,原创 2015-05-23 11:32:11 · 786 阅读 · 0 评论 -
调侃《Head First设计模式》之迭代器和组合模式(一)
现在餐厅来了两个新的厨师A和B,他们各自有各自接受菜单的方式。A的方式接受的是将菜单项放在一个ArrayList当中的菜单,而B则是接受将菜单项放在数组当中的菜单。一个菜单项的类如下: 餐厅的侍女的任务是对顾客需求打印定制的菜单,甚至告诉人们哪一个菜单项是素食。招代规格如下图: 两个厨师接收不同的菜单会导致什么问题呢?如果侍女要打印出原创 2015-05-17 10:56:13 · 835 阅读 · 0 评论 -
调侃《Head first设计模式》之适配器模式
你需要在欧洲使用美国制造的笔记本,但是插口和电压的不一致使得你需要一个叫做适配器的东西,如图: 通过适配器,我们就可以将本来不可以协调合作的两种事物联系在一起了。 那面向对象的适配器又是什么呢?其实,OO适配器和真实世界的适配器扮演着相同的角色:将一个接口转换为另一个接口,以符合用户的期望。 可以简单地用下图理解适配器: 现在我原创 2015-05-01 12:06:41 · 1225 阅读 · 0 评论 -
调侃《Head First设计模式》之模板方法模式
现在有两个人,一个爱喝咖啡,一个爱喝茶,让我们用代码创建咖啡和喝茶: 咖啡类: 茶类: 很容易发现,咖啡喝茶的代码有惊人的相似。 经过之前设计模式的阅读,你应该已经有意识的把相同的部分抽取出来。pourInCup和boilWater方法相同,于是可以考虑将它们整合到一个公共的类中,我们可以这样设计:原创 2015-05-09 10:41:09 · 1242 阅读 · 0 评论 -
调侃《Head First设计模式》之外观模式
上一篇谈了适配器模式,主要用于转换类的接口,今天谈外观模式,主要用于简化类的接口。照惯例由故事入手。 现在你要建立自己的家庭电影院,你心目中完美的家庭影院系统包括:DVD播放器、投影机、自动屏幕、环绕立体声甚至还有爆米花机。 看下这些组件的类图: 现在你好不容易将整个系统连起来了,准备播放电影了,播放电影你要执行以下步骤:原创 2015-05-02 12:39:01 · 871 阅读 · 0 评论 -
调侃《HeadFirst设计模式》之观察者模式
上次总结完了策略模式,这次继续跟随着《Head First 设计模式》,聊下观察者模式。 现在你接到了一个气象监测应用的项目,此系统中的三个部分是气象站(获取实际气象数据的物理装置)、WeatherData对象(获取来自气象站的数据,并更新布告板)和布告板(显示装置这只是其中一个,还有气象统计和天气预报布告板显示目前天气状况给用户看)。大概是下面这样的图:(右边的显示装置只是其中一个布告原创 2015-03-25 21:12:56 · 1152 阅读 · 0 评论 -
调侃《HeadFirst设计模式》之工厂模式(一)
今天我们再次跟随《HeadFirst设计模式》的脚步,原创 2015-04-11 21:23:26 · 2355 阅读 · 0 评论 -
调侃《Head First 设计模式》之单例模式
对于一个类来说,平常我们可以随便new出无限多个对象(只要内存hold得住),但是像线程池、缓存、对话框、日志对象、设备驱动程序的对象只能有一个对象,如果制造多个实例就会出现问题。比如程序行为异常,资源使用过量等。 那如何让一个类只能有一个对象呢?也许你想到了在另一个类持有该类的对象引用,在要new出这个类的时候判断下该引用是否为空就可以了。但这样做会提高类间的耦合度,而且会在不同原创 2015-04-25 11:02:27 · 1070 阅读 · 0 评论 -
调侃《Head First 设计模式》之命令模式
首先你有一个遥控器,什么样的呢?它有七个插槽,可以插上七种不同的装置,每个插槽对应两个按钮,分别对插槽的装置进行开关操作。如下图: 现在你需要设计遥控器的API,使得遥控器可以接入某厂商的设备装置需要插到插槽上的设备的类如下图: 类不少,而且以后还会增加,所以设计一个复用性和可扩展性高的遥控器API变得十分迫切。 我们看到,原创 2015-04-25 20:37:09 · 819 阅读 · 0 评论 -
调侃《Head First 设计模式》之工厂模式(二)
上一篇讲了简单工厂和工厂方法,在讲抽象工厂模式之前,现在先分析下简单工厂和工厂方法的主要特点和区别:简单工厂最大的优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件实时动态实例化相关的类,对于客户端来说去除了与具体产品的依赖,增加新的产品种类不用修改客户端。最大的缺点是如果要增加新的产品种类,就要修改工厂的代码,这违背了开放--关闭原则。工厂方法模式最大的特点是使得具体工厂创建方法的实现延原创 2015-04-18 20:50:11 · 725 阅读 · 0 评论 -
调侃《HeadFirst设计模式》之策略模式
近日阅读著名的《Head First 设计模式》,深深被作者生动风趣的讲解风格打动。作者让看似高深的设计模式变得像游戏一样好玩,这也是一种非常高效的传授知识的方式。介于对作者所讲的每一章都感觉回味无穷,心里有种冲动将回味转化为白纸黑字,供自己回味同时,也希望起到抛砖引玉之用~~~(原书作者不要投诉我。。) 今天首个要回味的是策略模式,先不管这个名字,咱先讲故事~~原创 2015-03-21 10:36:49 · 845 阅读 · 0 评论 -
调侃《Head First设计模式》之总结篇
在之前的设计模式博客中,主要根据《Head First设计模式》谈了10个设计模式,今天来做下总结,好好梳理提炼x下精华,而且今天准备把GOF经典大作《设计模式》中的23个设计模式都总结一遍。(以下内容参考了程杰的《大话设计模式》) 在GOF的大作中,把23个设计模式做了分类:建造型,结构型,行为型。 建造型的设计模式有:抽象工厂,建造者,工厂方法,原型。原创 2015-06-27 09:38:51 · 6441 阅读 · 0 评论