设计模式系列笔记

113 阅读3分钟

何为设计模式

代码与设计模式的关系

  • 项目 = 模块 + 沟通 (设计模式可以帮助我们更好得编写模块以及设计模块间的沟通)

设计模式扮演的角色

  • 帮助我们组织模块
    • 通过一些设计模式,组织模块间的组成结构
  • 帮助我们设计沟通
    • 有的设计模式可以帮助我们设计模块如何沟通
  • 提高代码质量
    • 通过设计模式,让代码更加优雅

设计原则

  • 开闭原则
    • 对扩展开放,对修改关闭。要留出具体使用时可供扩展的接口,但是要封装源码,不能给外部修改。
  • 单一职责原则
    • 一个模块只做一件事情
    • 关注对象:模块本身
  • 依赖倒置原则
    • 核心思想:上层模块不要依赖于具体的下层模块,而应该依赖于抽象。
    • 实现思路:在上层模块与下层模块之间添加抽象层,从而保证了上层模块不会由于下层模块的改动而发生剧烈变动。
    • 举个🌰
      function food1() {}
      function food2() {}
    
      order.prototype.orderFood1 = function() {}
      order.prototype.orderFood2 = function() {}
    
      function resturn(food) {
        var list = {
          food1: new food1(),
          food2: new food2(),
        }
        return list[food];
      }
    
      function order(order) {
        return resturn(food);
      }
    
  • 接口隔离原则
    • 接口应该细化,功能应该单一。
    • 关注对象:接口本身。
  • 迪米特法则
    • 两个模块可以在不互相了解彼此细节的情况下,通过中介等方式进行间接沟通
  • 里氏替换原则
    • 关注点:继承
    • 任何父类使用的地方,都可以用子类去替换。因此要求,子类需要完全继承父类的属性和方法。

设计模式的分类

  • 创建型 - 优雅地创建对象
    • 工厂模式 - 大量创建对象
    • 单例模块 - 全局只能有我一个
    • 建造者模式 - 精细化组合对象
    • 原型模式 - JavaScript的灵魂
  • 结构型 - 优雅地设计代码结构
    • 外观模式 - 给你的一个套餐
    • 享元模式 - 通过共享来减少数量(对象/代码块)
    • 适配者模式 - 用适配代替更改(适配新旧接口)
    • 桥接模式 - 独立出来,然后再对接过去(减少耦合)
    • 装饰者模式 - 更优雅地扩展需求
  • 行为型 - 模块之间行为的模式总结,帮助我们组织模块行为
    • 观察者模式 - 我作为第三方转发
    • 职责链模式 - 像生产线一样组织模块,对模块进行增删改
    • 状态模式 - 用状态代替判断
    • 命令模式 - 用命令去解耦(执行者与命令者)
    • 策略模式 - 算法工厂
    • 迭代器模式 - 告别for循环(不了解对象内部就可以遍历对象)
  • 技巧型 - 优化代码的技巧
    • 链模式 - 链式调用
    • 惰性模式 - 我要搞机器学习(记录执行状态)
    • 委托模式 - 让别人代替你收快递
    • 等待者模式 - 等你吗都回来再吃饭(多个异步)
    • 数据访问模式 - 一个方便的数据管理器