设计模式汇总

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