代码与设计模式
- 项目 = 模块 + 沟通
-
设计模式的作用
- 组织模块间的组成结构
- 设计模块间如何沟通
- 提高代码质量
设计原则
-
开闭原则
- 对扩展开放,对修改关闭
- 例:Vue、Webpack插件
-
单一职责原则
- 一个模块只做一件事,模块的功能越单一越好(主要关注模块本身)
-
依赖倒置原则
- 上层模块不要依赖于具体的下层模块,而应该依赖于抽象
- 例如:有多种食物可选择,但是通过餐厅作为吃饭的依赖
- 通过在中间添加一层抽象层(餐厅),使得具体使用的上层接口(点餐),不要被下层接口(食物)的变动影响
function Food1() { } function Food2() { } function Food3() { } // 错误做法 function Order() { } Order.prototype.orderFood1 = function () { } Order.prototype.orderFood2 = function () { } Order.prototype.orderFood3 = function () { } // 正确做法 function Restaurant(food) { var menu = { food1: new Food1(), food2: new Food2(), food3: new Food3(), } return menu[food] } function Order(food) { return Restaurant(food) }
-
接口隔离原则
- 接口应该细化,功能应该单一(关注接口)
-
迪米特法则(最少知识原则)
- 两个对象之间产生沟通,最好让他们互相知道的越少越好
- 应用:中介者模式
-
里氏替换原则
- 子类继承父类时,保证完全继承父类的属性和方法,使用父类的地方,子类可以进行替换
设计模式分类
-
创建型 - 帮助我们优雅地创建对象
- 工厂模式 - 大量创建对象
- 单例模式 - 全局只能有我一个
- 建造者模式 - 精细化组合对象,用于创建复杂对象
- 原型模式 - JavaScript的灵魂
-
结构型 - 帮助我们优雅地设计代码结构
- 外观模式 - 给你一个套餐
- 享元模式 - 共享来减少数量
- 适配器模式 - 用适配代替更改
- 桥接模式 - 独立出来,然后再对接过去,减小代码耦合度
- 装饰者模式 - 更优雅地扩展需求
-
行为型 - 模块之间行为模式的总结,帮助我们组织模块行为
- 观察者模式 - 两个模块的沟通通过第三方转发,
- 职责链模式 - 像生产线一样组织模块
- 状态模式 - 用状态代替判断
- 命令模式 - 用命令去解除执行者和命令者之间的耦合
- 策略模式 - 算法工厂
- 迭代器模式 - 告别for循环 (例ES6的forEach循环)
-
技巧型 - 优化代码的技巧
- 链模式 - 链式调用
- 惰性模式 - 机器学习(第一次执行后,记录下执行状态)
- 委托模式 - 将消息委托给他人代收
- 等待者模式 - 多个异步操作都成功再进行下一步操作
- 数据访问模式 - 一个方便的数据管理器
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。