设计模式[完结] 设计原则

183 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情

单一职责原则(SRP原则)

一个对象(方法)只做一件事情

优缺点

优点:降低了复杂度。 缺点:增加编写代码的复杂度,增大了对象相互联系的难度

最少知识原则(LKP原则)

最少知识原则说的是一个软件实体应当尽可能少地与其他实体发生相互作用。

设计模式中的最少知识原则

  1. 中介者模式

中介者模式很好地体现了最少知识原则。通过增加一个中介者对象,让所有地相关对象都通过中介者对象来通信,而不是相互引用。

  1. 外观模式

外观模式

外观模式的作用是对客户屏幕一组子系统的复杂度,外观模式对客户提供一个简单易用的高层接口,高层接口会把客户的请求转发给子系统来完成具体的功能实现。

假设我们在编写一个洗衣机的程序,客户至少要浸泡、洗衣、漂洗、脱水这4个子系统打交道。如果其中一个子系统发生了改变,那么客户的调用代码就得发生改变。而通过外观模式将客户和这些子系统隔开之后,如果修改子系统内部,只要外观不变,就不会影响客户的调用。


const a = function() {
    a1()
    a2()
}
const b = function() {
    b1()
    b2()
}
const facede = function() {
    a()
    b()
}

facede()

开放-封闭原则

软件实体(类、模块、函数)等应该是可以扩展的,但是不可修改的

例如:前面的扩展window.onload函数

开放-封闭原则最重要的点

最重要的就是找出程序会变化的地方。

  1. hook
  2. 回调函数

设计模式中的开放-封闭原则

  1. 发布订阅
  2. 模板方法
  3. 策略模式
  4. 代理模式
  5. 职责链模式

相对性

实际上,让程序保持完全封闭是不容易做到的。就算技术上做得到,也需要花费太多的时间和精力。而且让程序符合开放-封闭原则的代价是引入更多的抽象层次,更多的抽象有可能会增大代码的复杂度。

更何况,有一些代码是无论如何也不能完全封闭的,总会存在一些无法对其封闭的变化。作为程序员,我们可以做到的有下面两点。

  1. 挑选出最容易变化的地方,然后构造抽象来封闭这些变化
  2. 在不可避免发生修改的时候。尽量修改那些相对容易修改的地方。拿一个开源库来说,修改它的配置文件,总比修改它的源代码来的讲话。

代码重构

  1. 提炼函数
  2. 合并重复的代码片段
  3. 把条件分支语句提炼成函数
  4. 合理使用循环
  5. 提前让函数退出代替嵌套条件分支
  6. 传递对象参数代替过长的参数列表
  7. 尽量减少参数数量
  8. 少用三目运算符
  9. 合理使用链式调用
  10. 分解大型类
  11. 用return退出多重循环