笔者所发表的设计模式系列的随笔一共包含15篇,归纳总结了《Head First 设计模式》一书中的内容。在这些随笔中,尽量用简洁、概括的语言说明每个模式的概念、特点、用法,并配以图片(类图、流程图)给读者一种直观、具体的印象。希望大家能有所收获。
1、
2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 12、 13、 14、 15、 模式汇总
- 装饰着: 包装一个对象,已提供新的行为
- 状态: 封装了基于状态的行为,以使 状态拥有者将行为委托到当前的状态
- 迭代器: 在对象的集合之间游走,而不暴露集合的实现
- 外观: 简化一群类的接口
- 策略: 封装可以互换的行为,并使用委托来决定要使用哪一个。
- 代理: 包装对象,以控制对此对象的访问。
- 工厂方法: 封装实例化的行为,工厂子类决定实例化哪个具体的类、采用什么策略实例化类
- 适配器: 封装对象并提供不同的接口
- 观察者: 让对象能够在状态改变时被通知
- 模板方法:父类定义算法的模板, 由子类决定如何实现算法中的某些步骤
- 组合: 客户用一致的方法处理对象的集合和单个对象
- 单件: 确保有且只有一个对象被创建
- 抽象工厂: 允许客户创建对象的家族,而无需指定它们的具体类
- 命令: 封装请求,成为对象
相似模式的比较
- 装饰者: 包装另一个对象,并提供额外的行为
- 外观: 包装许多对象,以简化它们的接口
- 代理:包装另一个对象,并控制对它的访问
- 适配器:包装另一个对象,并提供不同的接口
设计原则汇总:
- “封装变化”。找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码放在一起。
- 针对接口编程,而不是针对实现编程。
- 对用组合,少用继承。
- 为交互对象之间的松耦合设计而努力。
- 对扩展开放,对修改关闭。
- 要依赖抽象,不要依赖具体类
- 最少知识原则:只和你的密友谈话
- 好莱坞原则:(高层组件对待底层组件的方式)别调用(打电话给)我们,我们会调用(打电话给)你。
- 单一责任,一个类应该只有一个引起变化的原因
模式的概念:
(看了这么多设计模式,我们再来回顾一下“模式”的概念,以及我们应该怎样来应用这些模式)
模式:是在某情景(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