Design Pattern Essentials

设计模式精要

​ 模式:是在某情境(context)下,针对某问题的某种解决方案。

设计原则

  1. 封装变化。(找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起)
  2. 针对接口编程,而不是针对实现编程。(”针对接口编程”真正的意思是”针对超类型(supertype)编程”)
  3. 多用组合,少用继承。
  4. 为了交互对象之间的松耦合设计而努力。
  5. 类应该对修改关闭,对扩展开放。(开闭原则)
  6. 要依赖抽象,不要依赖具体类。(依赖倒置原则)
  7. 只和你的密友谈话。(最少知识原则)
  8. 避免底层组件直接调用高层组件。(”好莱坞原则” – “Don’t call me, I’ll call you.”)
  9. 一个类应该只有一个引起变化的原因。(单一职责)​将你的思绪集中在设计本身,而不是在模式上。只有在真正需要时才使用模式。过度使用设计模式可能导致代码被过度工程化。应该总是用最简单的解决方案完成工作,并在真正需要模式的地方才使用它。

要点

  1. 良好的OO设计必须具备可复用、可扩充、可维护三个特征。
  2. 常把系统中会变化的部分抽出来封装。
  3. 松耦合的设计之所以能让我们建立有弹性的OO系统,能够应对变化,是因为对象之间的互相依赖降到了最低。
  4. 继承属于扩展形式之一,但不见得是达到弹性设计的最佳方式。
  5. 在我们的设计中,应该允许行为被扩展,而无需修改现有的代码。
  6. 组合和委托可用于在运动时动态地加上新的行为。

依赖倒置原则:

  • 变量不可以持有具体类的引用。
  • 不要让类派生自具体类。
  • 不要覆基类中已实现的方法。

内聚:

用来度量一个类或模块紧密地达到单一目的或责任。当一个模块或者一个类被设计成只支持一组相关的功能时,我们说它具有高内聚。反之,当被设计成支持一组不相关的功能时,我们说它具有低内聚。内聚是一个比单一职责原则更普遍的概念,但两者的关系其实是很密切的。遵守单一职责的类容易具有很高的聚合力,而且比背负许多责任的低内聚类更容易维护。

OO模式:

策略模式:

​ 定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

观察者模式:

​ 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,他的所有依赖者都会收到通知并自动更新。

装饰者模式:

​ 动态的将责任附加到对象上。若要拓展功能,装饰者提供了比继承更有弹性的替代方案。

工厂方法模式:

​ 定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

抽象工厂模式:

​ 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

单例模式:

​ 确保一个类只有一个实例,并提供一个全局访问点。

命令模式:

​ 将“请求”封装成对象,以便使用不同的请求、队列或日志来参数化其他对象。命令模式也支持可撤销操作。

适配器模式:

​ 将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

外观模式:

​ 提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

模板方法模式:

​ 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

迭代器模式:

​ 提供一种方法,顺序访问一个聚合器对象中的各个元素,而又不暴露其内部的表示。把游走的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各得其所。

组合模式:

​ 允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。在实现组合模式时,有许多设计上的折中。要根据需要平衡透明性和安全性。

状态模式:

​ 允许对象在内部状态改变时改变它的行为,对象基于内部状态而拥有不同的行,对象看起来好像修改了它的类。

代理模式:

​ 使用代理模式创建代表(representative)对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。

生成器模式:

​ 封装一个产品的构造过程,允许按步骤构造并可以改变过程。

知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

发表评论

电子邮件地址不会被公开。 必填项已用*标注