能干什么
- 帮我们设计组织模块:通过设计模式,组织模块之间的组成结构
- 帮我们设计沟通:设计模块间如何沟通
- 提高代码质量:让代码具备可读性
设计模式的设计原则
- 开闭原则:程序对扩展开放,对修改关闭;能够不用修改源码的去扩展功能
- 单一职责原则:一个模块只做一件事情,工作越单一越好
- 依赖倒置原则:上层模块不要依赖具体的下层模块,而依赖于抽象
- 接口隔离原则:接口细化,功能单一,不要一个接口调用太多的方法;单一职责原则关注模块,接口隔离关注于接口
- 迪米特法则:也叫最少知识原则,在两个模块产生沟通时,知道的越少越好;如中介者模式
- 里氏替换原则:关注于继承,任何父类使用的地方,都可以使用子类去替换,在用子类去继承父类时,必须保证子类完全继承父类的任何属性和方法
设计模式的分类
创建型
- 可以帮助我们优雅的创建对象
- 工厂模式–大量的创建对象
- 建造者模式–精细化组合对象
- 单例模式-- 全局只能有我一个,保证某个特定实例化对象只有一个
- 原型模式–JavaScript的灵魂,相当于原型链
结构型
- 帮我们优雅的设计代码结构
- 外观模式–给你一个套餐
- 享元模式–共享来减少数量,减少对象/代码块的数量
- 适配器模式–用适配代替更改,在两个对象之间的接口/数据不适配的时候,不用更改这两个对象,可以自己写一段适配代码
- 桥接模式–独立出来,然后再对接过去;减少代码的耦合度
- 装饰者模式–更优雅的扩展需求
行为型
- 模块之间行为的模式总结,帮我们组织模块行为
- 观察者模式–作为第三方转发;定义一个第三方,两个模块之间的沟通通过第三方去转发
- 职责链模式–像生产线一样组织模块
- 状态模式–用状态代替判断;有效的减少if-else,让对象根据不同状态展现不同的行为
- 命令模式–用命令去解耦;用命令去解除我们执行者和命令者之间的耦合
- 策略模式–算法工厂
- 迭代器模式–告别for循环:如forEach循环
技巧型
- 帮我们优化代码的技巧
- 链模式–链式调用、链式编程
- 惰性模式–我要搞机器学习;在代码执行后记录代码的执行状态
- 委托模式–让别人代替你收快递
- 等待者模式–等你们都回来再吃饭;适用于多种异步操作,等异步操作都成功返回结果了 再进行下一步操作
- 数据访问模式–一个方便的数据管理器