09 原则

单一职责原则

  • 职责被定义为:引起变化的原因;
  • SRP原则体现为:一个对象(方法)只做一件事情;

常用模式:

  • 代理模式
  • 迭代器模式
  • 单例模式
  • 装饰者模式

分离职责

  • 如果随着需求的变化,有两个职责总是同时变化,那就不必分离他们;
  • 职责的变化轴线仅当它们确定会发生变化时才有意义;

最少知识原则

  • 一个软件实体应当尽可能少地与其他实体发生相互作用;
  • 单一职责把对象划分为较小的粒度提高对象的复用性;但越来越多的对象之间可能会产生复杂的联系;
  • 最少知识原则尽量减少对象之间的交互,常见做法是引入一个第三对象;

常用模式

  • 中介者模式
  • 外观模式
  • 为一组子系统提供一个简单的访问入口;
  • 隔离客户与复炸子系统之间的联系;
var A = function() {
  a1();
  a2();
};
var B = function() {
  b1();
  b2();
};
var facade = function() {
  A();
  B();
};
facade();

封装在最少知识原则中的体现

  • 封装即对数据的隐藏,只暴露必要的API;
  • 封装也用来限制变量的作用域;

开放封闭原则

  • 软件实体等应该是可以扩展的,但是不可以修改;
  • 当需要改变一个程序的功能或者给这个程序增加新功能的时候,可以使用增加代码的方式但是不允许修改程序的源代码;

找出变化的地方

  • 对象的多态性消除条件分支
  • 过多的条件分支语句时造成程序违反开放-封闭原则的一个常见原因;
  • 利用多态的思想,把程序中不变的部分隔离,把可变部封装起来,程序就具有了可扩展性;
  • 放置挂钩
  • 由于子类的数量是无限制的,总有一些个性化子类迫使不得不改变已经封装的算法骨架;
  • 可以在父类中某个容易变化的地方放置挂钩,其返回结果由具体的子类决定,决定了程序的下一步;
  • 使用回调函数
  • 回调函数是一种特殊的挂钩;
  • 把易于变化的逻辑封装在回调函数里,把他当作参数传入一个稳定和封闭的函数中;

设计模式中的实现

  • 发布-订阅模式
  • 降低多个对象之间的依赖,取代对象之间硬编码的通知机制;
  • 增加订阅者时,发布者的代码不需要修改,也会影响之前的订阅者;
  • 模版方法模式
  • 子类方法种类和执行顺序不变,把这部分逻辑放到父类模版方法里;子类具体实现可辨,封装到子类中;
  • 通过增加新的子类便能给系统增加新的功能,并不需要改动抽象父类以及其他的子类;
  • 策略模式
  • 代理模式
  • 职责链模式

你可能感兴趣的:(09 原则)