设计模式
Zoctan
Just do IT.
展开
-
《Head First 设计模式》笔记1
前言对白很有趣,而且营造地很有氛围,如果还不会设计模式的话是值得一读的。本笔记当然不会有那些有趣的图片和氛围,内容也会尽量浓缩。策略模式(Strategy)定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。栗子某公司做了一款鸭子游戏,游戏中的鸭子可以游泳,可以呱呱叫。系统设计了一个鸭子抽象类,让各种鸭子都继承它:ab...原创 2018-03-30 19:47:17 · 252 阅读 · 0 评论 -
《Head First 设计模式》笔记9
状态模式(State)允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。栗子现在有一台糖果机,它的状态(挺复杂的): - 没有 25 分钱 -> 投入 25 分钱 -> 有 25 分钱 - 有 25 分钱 -> 转动曲柄 -> 售出糖果(数量不为0) | 糖果售罄(数量为0) - 有 25 分钱 -> 退钱按钮 -> 退出 ...原创 2018-04-11 16:42:15 · 188 阅读 · 0 评论 -
《Head First 设计模式》笔记8
模版方法模式(Template)在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类。模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 好莱坞原则:别调用(打电话给)我们,我们会调用(打电话给)你。 (由高层组件决定低层组件的行为,而不是反过来)栗子现在你有两种冲泡饮料,分别是咖啡和茶。咖啡的冲泡过程: 1. 把水煮沸 2. 用沸水冲泡...原创 2018-04-11 16:41:47 · 180 阅读 · 0 评论 -
《Head First 设计模式》笔记7
适配器模式(Adapter)将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。栗子欧洲的插座大多是三脚的,而美国的插头大多是两脚的,那么如何让两脚插头插进三脚插座里呢?这就需要一个转换头,作为一个中介,二脚插头先插入转换头,然后转换头再插入三脚插座。还记得笔记1里的鸭子吧?interface Duck { void quack(...原创 2018-04-11 16:40:45 · 213 阅读 · 0 评论 -
《Head First 设计模式》笔记6
命令模式(Command)将“请求”封装成对象,以便使用不同的请求,队列或日志来参数化其他对象。命令模式也支持可撤销的操作。栗子现在有个万能遥控器,它有五个插槽和五对开关按钮。每个插槽可以插一张存储卡,存储卡里面存的是可以控制的某个电器代码,对应的开关按钮可以控制某个电器开关。(听起来这个遥控器有点奇怪是不是?你把它想像成小霸王游戏机就可以了)你的任务就是给遥控器上的这些开...原创 2018-04-11 16:40:18 · 158 阅读 · 0 评论 -
《Head First 设计模式》笔记5
单例模式(Singleton)确保一个类只有一个实例,并提供一个全局访问点。应用场景:线程池、注册表、任务管理器、日志对象、充当打印机、显卡等设备的驱动程序等的对象。经典的单例模式class Singleton { private static Singleton instance; // 私有的构造器,外部无法 new Singleton() p...原创 2018-04-11 16:39:47 · 168 阅读 · 0 评论 -
《Head First 设计模式》笔记4
工厂模式(Factory)定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。new按照之前的原则,使用接口,并 new 一个具体实现:Duck duck = new MallardDuck();但如果出现一堆相关的具体类时,可能会写出这样的代码:Duck duck;if (picnic) { // 在野外,是绿头鸭...原创 2018-04-11 16:39:03 · 155 阅读 · 0 评论 -
《Head First 设计模式》笔记3
装饰者模式(Decorate)动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 设计原则四:类应该对扩展开放,对修改关闭。 如果使用过 Python,应该听过装饰器,虽然概念有点不同,但都是通过动态添加的方式给对象扩展功能。栗子星巴克的订单系统系统中有个饮料抽象类 Beverage,店内的饮料都必须继承该类:abstract...原创 2018-04-01 17:56:23 · 173 阅读 · 0 评论 -
《Head First 设计模式》笔记2
观察者模式(Observer)定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。初识我们先来了解一下报纸和杂志的订阅是怎么回事: 1. 报社的业务就是出版报纸、杂志等各种出版物。 2. 如果我想看报社的 A 报纸和 B 杂志,那么就向报社订阅 A 报纸和 B 杂志。 3. 当他们有新的 A 报纸或 B 杂志出版时,就会向你派送,只要你是他...原创 2018-03-30 19:52:25 · 208 阅读 · 2 评论 -
《Head First 设计模式》笔记10
代理模式(Proxy)为另一个对象提供一个替身或占位符以控制对这个对象的访问。栗子还记得上一个笔记中的糖果机吧,现在产品经理想要一份写着糖果机位置、库存和当前的状态报告。是不是挺简单的?赶紧写代码。糖果机加上位置信息:class GumballMachine { // ... private String location; public ...原创 2018-04-11 16:42:41 · 240 阅读 · 0 评论