这是我参与「第四届青训营 」笔记创作活动的第1天
设计模式
为了解决 特定问题 的 解决方案模型。 设计模式是可复用面向对象设计的基础
面向对象
面向对象编程:具有封装、抽象、继承、多态四大特性
- 封装:隐藏了代码的实现细节,只暴露方法。程序员不必担心实现细节,而只关心操作。
- 继承:对象可以通过使用每个块的属性或通过继承扩展块的功能来相互交互。继承确保了代码被重用。
- 多态:子类可以继承父类的方法,但自己内部还可以重写这个方法
面向对象开发:包括面向对象分析 OOA、面向对象设计 OOD、面向对象编程 OOP。
设计模式的十大原则
- 单一职责原则:一段代码块只应该负责一个职责。
- 开放-封闭原则:要对扩展开放,对修改关闭。
- 里氏替换原则:子类应该可以替换父类出现的任何地方并保持预期不变。不要破坏继承体系。
- 接口隔离原则:设计接口的时候要精简单一。
- 依赖倒置原则:面向接口编程。
以上为最主要的五大设计原则
- 最少知识原则:降低耦合度。
- 组合/聚合复用原则:多用组合少用继承。
- 不要重复你自己:功能语义重复的代码应该合并。
- 尽量保持简单。
- 不要过度设计暂时用不到的逻辑。
23种设计模式
- 第一类:创建型(5种):抽象工厂、工厂、单例、建造者、原型
- 第二类:结构型(7种):桥接、代理、装饰器、适配器、享元、组合、门面(外观) -第三类:行为型(11种):观察者、模板、迭代、状态、命令、中介者、解释器、职责链、访问者、策略、备忘录
设计模式的应用
浏览器中的设计模式
单例模式
定义:全局唯一访问对象 应用场景:缓存,全局状态管理等
例子:用单例模式实现请求缓存
发布订阅模式
定义:一种订阅机制,可在被订阅对象发生变化时通知订阅者 应用场景: 从系统架构之间的解耦
例子:用发布订阅模式实现用户上线订阅
javascript中的设计模式
原型模式
定义: 复制已有对象来创建新对象 应用: js中对象创建的基本模式
例子:用原型模式创建上线订阅中的用户
代理模式
定义: 可自定义控制对象的访问方式,并且允许在更新前后做一些额外代理 应用:监控,代理工具,前端框架实现等
例子:用代理模式实现用户状态订阅
迭代器模式
定义: 在不暴露数据类型的情况下,访问集合中的数据 应用:
例子:用for of迭代所有组件
前端框架中的设计模式
代理模式
与js中有所不同
例子:前端框架中对DOM操作的代理
组合模式
与迭代器模式有所类似 定义:可以多个对象组合使用成为单个对象,这些对象也可以单个使用 应用场景:DOM 组件
例子:React的组件结构
总结
使用设计模式时不要生搬硬套代码模板,更重要的是掌握思想。