Head First Design Patterns
by Eric Freeman, Elisabeth Freeman, Kathy sierra, and Bert Bates
Copyright © 2004 O’Reily Media, Inc.
目录
- 第1章 欢迎来到设计模式世界:设计模式入门 —— 策略模式
- 第2章 让你的对象知悉现状:观察者模式
- 第3章 装饰对象:装饰者模式
- 第4章 烘烤OO的精华:工厂模式
- 第5章 独一无二的对象:单件模式
- 第6章 封装调用:命令模式 —— 命令模式;空对象
- 第7章 随遇而安:适配器与外观模式 —— 适配器模式;外观模式;最少知识原则
- 第8章 封装算法:模板方法模式
- 第9章 管理良好的集合:迭代器与组合模式
- 第10章 事物的状态:状态模式
- 第11章 控制对象访问:代理模式
- 第12章 模式中的模式:复合模式
- 第13章 真实世界中的模式:与设计模式相处
- 附录A 其他模式
设计模式
创建型模式,提供了一种在创建对象的同时隐藏创建逻辑的方式:
- 工厂方法模式定义一个创建对象的接口,但让子类决定实例化的类是哪一个。工厂方法让类将实例化延迟到子类。
- 抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而无需明确指定它们的具体类。
- 单件模式 (单例模式) 确保一个类只有一个实例,并提供一个全局访问点。
模式 | 描述 | 目的 |
---|---|---|
工厂方法模式 | 子类决定创建哪个具体类 | |
抽象工厂模式 | 允许客户创建对象的家族,而无需指定它们的具体类 | |
单件模式 | 确保有且只有一个对象被创建 |
结构型模式,关注类和对象的组合:
- 装饰者模式
- 适配器模式将一个类的接口转换为客户期望的另一个接口。适配器使原本接口不兼容的类可以协同工作。
- 外观模式为子系统中的一组接口提供了统一的接口。外观定义了一个更高级别的接口,使子系统更易于使用。
- 组合模式将对象组合成树形结构来表示“部分-整体”层次结构。组合让客户以一致的方式对待个体对象和对象组合。
- 代理模式
模式 | 描述 | 目的 |
---|---|---|
装饰者模式 | 包装一个对象,以提供新的行为 | 不改变接口,但加入职责 |
适配器模式 | 改变一个或多个类的接口 | 将一个接口转换为另一个接口 |
外观模式 | 简化一组类的接口 | 让接口更简单 |
组合模式 | 客户对待对象的集合与个体的对象一视同仁 | 统一整体和个体 |
代理模式 | 包装对象,以控制对此对象的访问 |
行为型模式,关注对象之间的通信:
- 策略模式定义了一族算法,将每个算法封装起来,并使它们之间可互相替换。策略模式使算法的变化可以独立于使用该算法的客户。
- 观察者模式
- 命令模式将一个请求封装为一个对象,从而可以使用不同的请求、队列或日志请求来参数化其他对象,并支持可撤销的操作。
- 模板方法模式式在一个方法中定义一个算法的框架,而将某些步骤延迟到子类中。模板方法允许子类重新定义算法的某些步骤,而无需更改算法的结构。
- 迭代器模式提供了一种顺序访问一个聚合对象的各个元素的方法,而不暴露其基底层表示。
- 状态模式允许对象在内部状态改变时更改它的行为。对象看起来好像改变了它的类。
模式 | 描述 | 目的 |
---|---|---|
策略模式 | 将可以互换的行为封装起来,使用委托来决定使用哪一个行为 | 把选择权交给用户 |
观察者模式 | 当某个状态改变时,允许一组对象能被通知到 | 解耦观察者与被观察者 |
命令模式 | 将请求封装成命令,并记录下来,能够撤销与重做 | 解耦请求和处理 |
迭代器模式 | 提供一个方式来遍历一个对象的集合,而无需暴露集合的实现 | 统一对集合的访问方式 |
模板方法模式 | 由子类决定如何实现算法中的某些步骤 | 逻辑复用 |
状态模式 | 封装基于状态的行为,并将行为委托到当前状态 | 绑定状态和行为 |
设计原则
- 将变化的部分封装起来
- 合成复用原则:优先使用组合,而不是继承
- 针对接口编程,不针对实现编程
- 开闭原则 (Open Closed Principle)
- 依赖倒置原则 (Dependency Inversion Principle):要依赖抽象,不要依赖具体类。
- 最少知识原则 (The Principle of Least Knowledge),又称迪米特法则 (The Law of Demeter):只和离你最近的朋友进行交互。
- 好莱坞原则 (Hollywood Principle)
- 单一职责原则 (Single Responsibility Principle):一个类应该只有一个引起变化的原因。