![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
读书笔记
peking1987
这个作者很懒,什么都没留下…
展开
-
装饰者模式——Head First Design Patterns
定义:提供一种比扩展更灵活的选择(实际上还是用了组合),给对象动态地添加额外的功能。 使用场景: 当需要给已有功能添加额外的功能时 类图: 代码样例:JDK内置的输入流代码(如PushbackInputStream) public class StarbuzzCoffee { public static void main(String args[])翻译 2013-03-31 17:16:26 · 412 阅读 · 0 评论 -
进一步学习设计模式——Head First Design Patterns
1. 设计功能包括约束和目标 2. 设计模式并不是一层不变的,如果你的设计模型和经典的设计模式有区别,不妨记下来,方便后人理解。 3. 问题都有两面性,就像目标和约束,二者终究要有一个平衡点,否则无法稳定。May the force be with you! 4. Elements of Reusable Object-Orie翻译 2014-01-22 21:46:51 · 810 阅读 · 0 评论 -
责任链模式——Head First Design Patterns
定义:使用多个对象处理同一个请求 使用场景:同一个请求需要进行多种不同处理时 类图: 代码样例: 优点:1)不同功能在不同的对象中,可以通过改变链的成员或者顺序,动态添加或者删除功能 2) 缺点:1)难以调试和定位问题 类似的设计模式: 配套的内功心法:1)翻译 2014-01-22 21:28:48 · 774 阅读 · 0 评论 -
解释器模式——Head First Design Patterns
定义:通过类定义一组语法,并且通过解释器解释符合语法的句子。每一个类都是一种语法规则,汇总起来就是一种语言。 使用场景:实现一种简单的语法解释器 类图: 代码样例: 优点:1)每个类都代表一种语法,便于理解 2)便于改变或者扩展 3) 缺点:1)当语法太多时,解释器模式会变得相当复杂 类似的设计模式: 配套的内功心法:1)翻译 2014-01-22 21:31:30 · 563 阅读 · 0 评论 -
原型模式——Head First Design Patterns
定义:通过克隆已存在的实例生成新实例 使用场景:当创建一个类的新实例代价很昂贵时,例如当创建一个由相当多子类组成的类时 类图: 代码样例:spring配置原型模式 优点:1)能够创建未知类型的对象 2)拷贝对象可能比创建一个新对象更高效 缺点:1)复制一个对象有时候很复杂 类似的设计模式: 配套的内功心法:1)原型模式在不知道具体类的情况下生成翻译 2014-01-22 21:36:42 · 624 阅读 · 0 评论 -
访问者模式——Head First Design Patterns
定义:当封装类似功能的原则不是很重要时,可以通过访问者模式遍历组合对象,增加新功能 使用场景:当封装类似功能的原则不是很重要,并且需要给某个组合对象增加新功能时 类图: 代码样例: 优点:1)在不改变组合对象结构的情况下,轻松地给组合对象增加新功能 2)新增的功能集中在访问者对象中 缺点:1)组合对象的功能并没有完全封装在自身当中 2)由于采用了遍历功能,改变组合对翻译 2014-01-22 21:43:02 · 399 阅读 · 0 评论 -
状态模式——Head First Design Patterns
定义:当一个对象的内部状态发生改变时,它的行为也随着改变,就好像换了一个类一样。 使用场景:同一个上下文中,某个对象有不同的状态,并且不同的状态行为不一样 类图: 代码样例: package headfirst.state.gumballstate; public interface State { public void insertQuarter()翻译 2014-01-16 22:30:49 · 892 阅读 · 0 评论 -
代理模式——Head First Design Patterns
定义:为对象提供一个代理以控制其它对象对它的访问 使用场景: 1)远程代理:访问远程对象 2)虚拟代理:根据需要创建开销大的对象 3)保护代理:控制对原对象的访问 类图: 代码样例: package headfirst.proxy.virtualproxy; import java.awt.*; import javax.swing.*; class Im翻译 2014-01-16 22:41:02 · 941 阅读 · 0 评论 -
复合模式——Head First Design Patterns
定义:组装使用某些设计模式,并且这些设计模式放在一块能解决一种通用问题 使用场景: 类图: 代码样例:MVC 优点:1)集各种设计模式的优点 2)解决一种通用问题 缺点: 类似的设计模式: 配套的内功心法:1)MVC中的M实际不是指模型,而是指具体的逻辑代码 2)MVC包含观察者(视图显示)、策略(控制器,用于调用不同的逻辑)、组合(人机接口)等设翻译 2014-01-20 23:05:19 · 643 阅读 · 0 评论 -
中介者模式——Head First Design Patterns
定义:使用一个中介者类集中化管理对象之间的通信或者交互 使用场景:界面各组件之间的协作管理 类图: 代码样例: 优点:1)通过集中管理,增加功能的重用性 2)简化系统中对象之间的通信或者交互方式 3) 简化维护 缺点:1)如果设计的不够好,中介者模式本身就会变得很复杂 类似的设计模式: 配套的内功心法:1)翻译 2014-01-20 23:11:08 · 852 阅读 · 0 评论 -
建造者模式——Head First Design Patterns
定义:抽象封装一个产品的创建过程,使得创建过程可以分步进行 使用场景: 类图: 代码样例: 优点:1)规范化产品创建步骤 2)类似产品可以使用同一个规范 缺点:1) 类似的设计模式: 配套的内功心法:1)翻译 2014-01-20 23:15:16 · 925 阅读 · 0 评论 -
享元模式——Head First Design Patterns
定义:当多个类实例有完全相同的属性或者方法时,使用一个类实例代替多个类实例相同的部分 使用场景:当多个类实例有完全相同的属性或者方法时 类图: 代码样例: 优点:1)减少实例,节省内存 2)集中管理类实例相同的部分 缺点:1)不同实例耦合了其中相同的部分 类似的设计模式: 配套的内功心法:1)翻译 2014-01-20 23:17:15 · 646 阅读 · 0 评论 -
备忘录模式——Head First Design Patterns
定义:备份某个对象的状态,这样能够将一个对象恢复到上一个状态 使用场景:当需要回到某一状态时 类图: 代码样例:序列化和反序列化 优点:1)提供恢复状态的能力 缺点:1)保存和恢复状态比较耗性能 类似的设计模式: 配套的内功心法:1)备忘录对象的作用是保存状态翻译 2014-01-22 21:35:00 · 517 阅读 · 0 评论 -
迭代器模式——Head First Design Patterns
定义:迭代器模式提供一种不暴露集合就能访问集合内多态对象的途径 使用场景:需要遍历某个集合时 类图: 代码样例: package headfirst.iterator.dinermerger; public class ArrayIterator implements Iterator { MenuItem[] items; int position =翻译 2014-01-09 22:57:07 · 606 阅读 · 0 评论 -
组合模式——Head First Design Patterns
定义:组合模式将对象组合成树形结构以表示“部分—整体”的层次关系,这使得使用者处理单个对象和组合对象时具有一致性 使用场景:当单个对象和组合对象需要对外提供类似的接口时 类图: 代码样例: package headfirst.composite.menu; import java.util.Iterator; import java.util.ArrayList翻译 2014-01-09 23:12:36 · 642 阅读 · 0 评论 -
抽象工厂模式——Head First Design Patterns
定义:创建一组相似或者相互依赖的对象,但是创建方法不返回具体的类。 使用场景: 1)当需要创建多个系列的产品时,想要保证同一系列的产品在同一个工厂里面 类图: 代码样例: public class ChicagoPizzaIngredientFactory implements PizzaIngredientFactory { public Doug翻译 2013-04-08 23:01:57 · 442 阅读 · 0 评论 -
单例模式——Head First Design Patterns
定义:保证一个类只有一个实例,并且提供一个公有的获取该实例的方法。 使用场景:类当前没有任何属性并且以后也不大可能增加属性 类图: 代码样例: 防并发的: public class Singleton { private static Singleton uniqueInstance; // other useful instance variables翻译 2013-04-15 22:34:39 · 401 阅读 · 0 评论 -
策略模式——Head First Design Patterns
定义:设计一组可以互相替换的算法,使得算法使用者不会因为算法的变化而在代码结构上受到影响。 使用场景:业务功能经常发生改变或者定制性比较强的功能点 类图: 代码样例:典型的Has-A关系 public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior;翻译 2013-03-28 22:03:22 · 482 阅读 · 0 评论 -
观察者模式——Head First Design Patterns
定义:对象间一组一对多的依赖关系,当目标对象的状态发生改变时,所有依赖对象会被自动通知到并且发生相应的变更。 使用场景:多个对象的属性之间存在随动关系的场合,观察者模式在UI设计中很常用 类图: 代码样例:JDK拥有内置的观察者模式代码(Observable, Observer) public class WeatherData implements Subje翻译 2013-03-29 23:45:54 · 395 阅读 · 0 评论 -
简介——Head First Design Patterns
1. 知道抽象、继承、多态的概念并不意味着你是一个好的设计人员。一个真正的设计大师知道如何创建灵活可维护的接口以适应变化。 2. 大脑不喜欢存储那些没有的信息,它倾向于存储那些真正有意义的信息,以确保大脑存储资源被有效地利用。 3. 提高学习设计模式的效率:1)节奏慢下来,理解的越多,需要记忆的就越少2)多做练习,多写笔记3)Read the “There are No Dumb Qu翻译 2013-03-25 23:25:20 · 559 阅读 · 0 评论 -
适配器模式——Head First Design Patterns
定义:将一个类的接口转换成使用者期望的接口,适配器使得使用者能够调用接口不匹配的类。 使用场景:需要将一个接口适配成另一个接口的时候,例如兼容旧版本的产品 类图: 代码样例: package headfirst.adapter.ducks; public interface Turkey { public void gobble(); public void翻译 2013-08-19 22:54:10 · 724 阅读 · 0 评论 -
学什么——Head First Design Patterns
1. 占有重要地位的设计模式 2. 什么时候用以及为什么要用设计模式? 3. 怎样在自己的设计中使用模式? 4. 什么时候不应该使用设计模式? 5. 面向对象的设计原则,这些是设计模式的基础,相当于武功秘籍的内功心法翻译 2013-03-25 23:23:41 · 383 阅读 · 0 评论 -
命令模式——Head First Design Patterns
定义:将一个任务封装为一个拥有特定接口的对象,这样不同的请求(例如排队请求或者记录日志)对应的任务可以封装为拥有相同接口的不同对象,并且能够支持还原操作。 使用场景:拥有多个请求及其对应的任务,需要支持还原操作,例如排队请求或者记录日志请求。命令类自身执行请求而不是委托给接受者在实际应用场景中是很常见的。 类图: 代码样例:1)java线程的任务就相当于命令类 p翻译 2013-04-22 23:02:55 · 454 阅读 · 0 评论 -
门面模式——Head First Design Patterns
定义:集成子系统的接口,对外提供一个统一的接口,以方便高层接口对其调用。 使用场景:当对外提供的接口比较多,使用者很难掌握时 类图: 代码样例: package headfirst.facade.hometheater; public class HomeTheaterFacade { Amplifier amp; Tuner tuner; DvdPl翻译 2014-01-07 22:11:00 · 656 阅读 · 0 评论 -
工厂方法模式——Head First Design Patterns
定义:定义一个用于创建对象的接口,让子类决定初始化哪一个具体的类。工厂方法把具体类的实例化推迟到子类。 使用场景: 1)当类的某个属性需要不同的实例化对象时;2)当不知道类的某个属性会有多少不同的实例化对象时 类图: 代码样例: public abstract class PizzaStore { abstract Pizza createPizza(Str翻译 2013-04-01 23:25:33 · 427 阅读 · 0 评论 -
模板方法模式——Head First Design Patterns
定义:模板方法定义了一个算法的步骤,并且允许子类重载某些步骤。 使用场景:算法的总体步骤基本稳定,但是某些步骤的具体算法经常改变 类图: 代码样例: package headfirst.templatemethod.barista; public abstract class CaffeineBeverageWithHook { void prep翻译 2014-01-07 22:19:29 · 803 阅读 · 0 评论 -
桥接模式——Head First Design Patterns
定义:将抽象与实现分离,使得二者可以独立变化 使用场景:已有系统增加一个新特性,可以桥接上去 类图: 代码样例: 优点:1)解耦各种不同维度的变化,增强代码的稳定性 缺点:1)变复杂了 类似的设计模式: 配套的内功心法:1)一个功能有多个维度的变化,将每个维度的变化都分离翻译 2014-01-20 23:09:23 · 565 阅读 · 0 评论