设计模式汇总
笔者所发表的设计模式系列的随笔一共包含15篇,归纳总结了《Head First 设计模式》一书中的内容。在这些随笔中,尽量用简洁、概括的语言说明每个模式的概念、特点、用法,并配以图片(类图、流程图)给读者一种直观、具体的印象。希望大家能有所收获。
1、策略模式 The Strategy pattern
2、观察者模式 The Observer Pattern
3、装饰者模式 The Decorator Pattern
4、工厂方法模式 The Factory Method Pattern
5、抽象工厂模式 The Abstract Factory Pattern
6、单例模式 The Singleton Pattern
7、命令模式 The Command Pattern
8、适配器模式 The Adapter Pattern
9、外观模式 The Facade Pattern
10、模板方法模式 The Template Method Pattern
11、迭代器模式 The Iterator Pattern
12、组合模式 The Composite Pattern
13、状态模式 The State Pattern
14、代理模式 The Proxy Pattern
15、复合模式 The Compound Pattern
模式汇总
- 装饰着: 包装一个对象,已提供新的行为
- 状态: 封装了基于状态的行为,以使 状态拥有者将行为委托到当前的状态
- 迭代器: 在对象的集合之间游走,而不暴露集合的实现
- 外观: 简化一群类的接口
- 策略: 封装可以互换的行为,并使用委托来决定要使用哪一个。
- 代理: 包装对象,以控制对此对象的访问。
- 工厂方法: 封装实例化的行为,工厂子类决定实例化哪个具体的类、采用什么策略实例化类
- 适配器: 封装对象并提供不同的接口
- 观察者: 让对象能够在状态改变时被通知
- 模板方法:父类定义算法的模板, 由子类决定如何实现算法中的某些步骤
- 组合: 客户用一致的方法处理对象的集合和单个对象
- 单件: 确保有且只有一个对象被创建
- 抽象工厂: 允许客户创建对象的家族,而无需指定它们的具体类
- 命令: 封装请求,成为对象
相似模式的比较
- 装饰者: 包装另一个对象,并提供额外的行为
- 外观: 包装许多对象,以简化它们的接口
- 代理:包装另一个对象,并控制对它的访问
- 适配器:包装另一个对象,并提供不同的接口
设计原则汇总:
- “封装变化”。找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码放在一起。
- 针对接口编程,而不是针对实现编程。
- 对用组合,少用继承。
- 为交互对象之间的松耦合设计而努力。
- 对扩展开放,对修改关闭。
- 要依赖抽象,不要依赖具体类
- 最少知识原则:只和你的密友谈话
- 好莱坞原则:(高层组件对待底层组件的方式)别调用(打电话给)我们,我们会调用(打电话给)你。
- 单一责任,一个类应该只有一个引起变化的原因
模式的概念:
(看了这么多设计模式,我们再来回顾一下“模式”的概念,以及我们应该怎样来应用这些模式)
模式:是在某情景(context)下,针对某问题的某种解决方案。
- 问题:包括目标和约束。
- 解决方案:一个通用的设计,用来解决约束,达到目标。
1、对于每个问题,我们应该思考的内容:
2、结果决定功能。类的结构决定类的功能,汽车的结构决定了汽车的功能……
3、设计应“保持简单”。Keep It Simple。“将你的思想集中在设计本身,而不是在模式上。只有在真正需要时才使用模式”。
设计模式分类(1):
“不管是在什么时候,只要我们有一大堆东西,很自然的就会想要为它们分类,这可以帮助我们再更抽象的层次上思考这些问题”
1、创建型模式:涉及到将对象实例化。这类模式都提供一个方法,将客户从所需要实例化的对象中解耦。
例如:Singleton、Factory Method、Abstract Factory、Builder、Prototype
2、行为型模式:都涉及到类和对象如何交互及分配职责。
例如:Template Method、Iterator、Command、Observer、State、Strategy、Mediator、Visitor、Memento、Interpreter、Chain of Responsibility
3、结构型模式:描述类和对象如何被组合以建立新的结构或新的功能。
例如:Decorator、Composite、Proxy、Facade、Adapter、Flyweight、Bridge
设计模式分类(2):
1、类模式:描述类之间的关系如何通过继承定义。类模式的关系是在编译时建立的。
Template Method、Factory Method、Adapter、Interpreter
2、对象模式:描述对象之间的关系,而且主要是利用组合定义。对象模式的关系通常在运行时建立,而且更加动态,更具有弹性。
Composite、Decorator、Proxy、Strategy、Iterator、Command、Facade、Observer、State、Abstract Factory、Singleton、Visitor、Memento、Chain of Responsibility、Bridge、Flyweight、Prototype、Builder、Mediator