《Head First设计模式》笔记(上)- 设计原则

  1. 封装变化
  2. 针对接口编程,而不是针对实现编程
  3. 多用组合,少用继承
  4. 为了交互对象之间的松耦合设计而努力
  5. 类应该对扩展开放,对修改关闭
  6. 要依赖抽象,不要依赖具体类
  7. 最小知识原则
  8. 好莱坞原则
  9. 应尽量让每个类保持单一责任

封装变化

找出应用中可能需要变化之处,把它们独立出来(并封装起来),不要和那些不要变化的代码混在一起。

如果每次新的需求一来,都会使某方面的代码发生变化,那么你就可以确定,这部分的代码需要被抽出来,和其他稳定的代码有所区分

针对接口编程,而不是针对实现编程

以前的做法是:行为来自超类的具体实现,或是继承某个接口并由子类自行实现而来。这两种做法都是依赖于“实现”,我们被实现绑得死死的,没办法更改行为(除非写更多代码)。

“针对接口编程”真正的意思是“针对超类型(supertype)编程”,货可以更明确地说成“变量的声明类型应该是超类型,通常是一个抽象类或者是一个接口”。

多用组合,少用继承

良好的OO设计必须具备可复用、可扩充、可维护三个特性。大多数的模式都允许系统局部改变独立于其他部分

为了交互对象之间的松耦合设计而努力

类应该对扩展开放,对修改关闭

要依赖抽象,不要依赖具体类

依赖倒置原则(Dependency Inversion Principle):不能让高层组件依赖低层组件,而且,不管高层或低层组件,两者都应该依赖于抽象。所谓高层组件,是由其他低层组件定义其行为的类。

一下指导方针能帮助避免在OO设计中违反依赖倒置原则:

  1. 变量不可以持有具体类的引用
  2. 不要让类派生自具体类
  3. 不要覆盖基类中已实现的方法(如果覆盖基类已实现的方法,那么你的基类就不是一个真正适合被继承的抽象。基类中已实现的方法,应该由所有的子类共享)

最小知识原则

减少对象之间的交互,不要让太多的类耦合在一起。

指导方针:就任何对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:

  1. 该对象本身
  2. 被当做方法的参数而传进来的对象
  3. 此方法所创建或实例化的任何对象
  4. 对象的任何组件(Has-A)

注意,如果某对象是调用其他方法的返回结果,不要调用该对象的方法!

好莱坞原则

别调用(打电话给)我们,我们会调用(打电话给)你(将决策权放在高层模块中)。

例如模板方法模式中,低层组件绝对不可以直接调用高层组件。

应尽量让每个类保持单一责任

因为一个类应该只有一个引起变化的原因。类的每个责任都有改变的潜在区域,超过一个责任,意味着超过一个改变的区域。如果一个类具有两个改变的原则,那么这会使得将来该类变化的几率上升;而当它真的改变时,你的设计中同时有两个方面将受到影响。

术语:

  • 内聚(cohesion):用来度量一个类或模块紧密地达到单一目的或责任
  • 高内聚:一个模块/类被设计成只支持一组相关功能
lambda /
Published under (CC) BY-NC-SA in categories 程序&设计  tagged with 设计模式  读书笔记