![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 82
iteye_2947
这个作者很懒,什么都没留下…
展开
-
《Head.First设计模式》的学习笔记(1)
1、慢一点,你理解的越多,需要记的就越少。2、勤做练习,自己记笔记。3、上床睡觉之前不要再看别的书了,或者至少不再看其他有难度的东西。4、要喝水,而且要多喝点水。5、大声说出来。6、听听你的大脑怎么说。7、要有点感觉!8、设计一点东西!书中列举的设计原则:1、封装变化。找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。2、针对接...原创 2012-01-31 21:53:28 · 56 阅读 · 0 评论 -
《Head.First设计模式》的学习笔记(14)--状态模式
意图:允许对象在内部状态改变时改变她的行为,对象看起来好像修改了它类。结构: 我们是不是发现它和策略模式很像啊?这个我们将后面仔细介绍这两个模式共同点和不同点,现在我们还是先看例子。 我们现在有一个糖果机,有一下几个状态: 我们先来看我们平常的设计会如何进行实现:public class GumballMachine { final static i...原创 2012-02-12 20:24:34 · 79 阅读 · 0 评论 -
《Head.First设计模式》的学习笔记(13)--组合模式
先说一下题外话,这个模式是我学的最累的模式,代码纠结无比,而且似乎又不经常用,但是我还是硬着头皮把这个模式给看完了。废话不多说,开始干活.......意图:允许你将对象组成属性结构来表现“整体/部分”的层次结构,组合能让客户以一直的方式处理个别的对象和对象组合。结构: 首先是组合包含组件,组件有两种:组合与叶节点元素。接着我们继续看例子:在原有的对象餐厅我们添加了晚餐...原创 2012-02-12 17:49:07 · 99 阅读 · 0 评论 -
《Head.First设计模式》的学习笔记(12)--迭代器模式
意图:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表现。 结构: 让我们看一下一个例子:对乡村的餐厅和对象村的煎饼屋合并了。现在碰到一个棘手的问题,餐厅的菜单是使用Arraylist来实现,而煎饼屋的菜单是用数组来进行实现的,由于各自的菜单已经与其他过多的代码进行耦合,所以不能进行更改,现在有一个女Waitress,需要打印全部菜单,我们最初设想就...原创 2012-02-12 15:30:46 · 76 阅读 · 0 评论 -
《Head.First设计模式》的学习笔记(11)--模板方法模式
意图:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。结构: 其中AbstractClass 实现为: public abstract class AbstractClass { final void templateMethod(){ primitiveOperation1();...原创 2012-02-12 00:46:51 · 98 阅读 · 0 评论 -
《Head.First设计模式》的学习笔记(10)--外观模式
意图:为子系统中的一组接口提供一个一致的界面,Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。结构: 例子:假设你有一套杀手级的家庭影院系统,内含DVD播放器、投影仪、自动屏幕、环绕立体声等。那么当你想看一部DVD时,需要做哪些事情呢(用最土的方式)?1、将灯光调暗;2、放下屏幕;3、打开投影仪;4、将投影仪的输入切换到DVD;5、...原创 2012-02-11 23:30:34 · 73 阅读 · 0 评论 -
《Head.First设计模式》的学习笔记(9)--适配器模式
软件开发中经常遇到的问题:假设已有一个软件系统,你希望它能和一个新的厂商类库搭配使用,但是这个新厂商所设计出来的接口,不同于旧厂商的接口。如果你不想改变现有的代码,也不能改变厂商的代码,那么你该如何解决这个问题。方法其实很简单,就是写一个类,将新厂商的的接口转成你所期望的接口。如图 这就是适配器模式。意图:将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼...原创 2012-02-11 23:27:26 · 84 阅读 · 0 评论 -
《Head.First设计模式》的学习笔记(8)--命令模式
背景:有时候我们需要对方法进行封装,通过对这些封装的方法进行调用,我们可以很好的处理一些事情。比如,记录日志,或者重复使用这些封装实现撤销功能。意图:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。结构: 例子:这次我们将设计一个家电自动化遥控器的API需求分析:遥控器的图: 1)、遥控器上具有七个可编程...原创 2012-02-11 22:55:34 · 100 阅读 · 0 评论 -
《Head.First设计模式》的学习笔记(7)--单件模式
背景:有一些对象其实我们只需要一个,比方说:线程池(threadpool)、缓存(cache)、对话框、处理偏好设置和注册表(registry)的对象、日志对象,充当打印机、显卡等设备的驱动程序的对象。事实上,这类对象只能有一个实例,如果制造出多个实例,就会导致许多问题产生,例如:程序的行为异常、资源使用过量,或者是不一致的结果。因此,我们设计这种类时必须确保只有一个实例,单件模式应运而生。单...原创 2012-02-11 13:55:01 · 64 阅读 · 0 评论 -
《Head.First设计模式》的学习笔记(6)--抽象工厂模式
意图:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。结构:实例:还是以Pizza店为例,现在pizza需要进行需要不同的原料,例如添加cheese,sauce等原料,重新扩展的pizza为: package headfirst.factory.pizzaaf;public abstract class Pizza { String name;...原创 2012-02-11 13:37:02 · 115 阅读 · 0 评论 -
《Head.First设计模式》的学习笔记(5)--工厂方法模式
意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。结构: 实例:下面我们以Pizza店的例子来谈谈“工厂方法模式”的来龙去脉,我们学习的思路是“原始设计-->简单工厂-->工厂方法”。情景分析:假如你有一个Pizza店,那么你的Pizza订单可能会写成如下代码(这段代码写在PizzaStore...原创 2012-02-10 23:58:13 · 95 阅读 · 0 评论 -
《Head.First设计模式》的学习笔记(4)--装饰者模式
意图:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。结构: 例子:下面我们以星巴兹(Starbuzz)的订单系统为例加以说明。需求分析:1)、星巴兹的饮料(Beverage)种类繁多,主要有HouseBlend、DarkRoast、Decaf、Espresso。2)、星巴兹的调料很多,主要有Steamed Milk、Soy、Moc...原创 2012-02-10 23:40:22 · 82 阅读 · 0 评论 -
《Head.First设计模式》的学习笔记(3)--观察者模式
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。结构: 例子:下面以模拟气象站系统来加以说明。需求分析:该系统的需求如下:1、气象站能够追踪目前的天气状况,包括温度、湿度、气压、2、气象站能够提供三种布告板,分别显示目前天气状况、气象统计和简单的预报。3、布告板上的数据必须实时更新。4、气象站必...原创 2012-02-10 23:27:07 · 74 阅读 · 0 评论 -
《Head.First设计模式》的学习笔记(2)--策略模式
先对策略模式有一个总体认识。意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。结构: 下面通过鸭子模拟器的设计来具体介绍。公司需要设计一套鸭子模拟器系统,该系统的第一次需求为:鸭子能够戏水;鸭子能够呱呱叫。根据该需求系统设计如下: 这个设计主要用了父类鸭子和子类绿头鸭、红头鸭,这样设计的目的是为了达到代码的复...原创 2012-02-10 23:09:17 · 68 阅读 · 0 评论 -
《Head.First设计模式》的学习笔记(15)--代理模式
意图:为另一个对象提供一个替身或占位符得以访问这个对象。 结构: 接着我们来看RMI远程代理:1.我们先在服务器注册好几个糖果机,由于我们现在使用RMI,我们需要构造糖果机和状态。糖果机首先变成一个服务,我们为糖果机创建一个远程接口,让开接口提供了一组可以远程调用的的方法。public interface GumballMachineRemote ext...原创 2012-02-13 00:03:03 · 112 阅读 · 0 评论