大致分为三类
- 创建型
- 行为型
- 结构型
创建型
- 工厂模式
暴露出一个工厂方法,实际上建造什么样的实例对象(也就是new 哪一个构造函数)我们不用关心 - 单例模式
保证一个类仅有一个实例。
结构型
- 适配器模式
是指将一个接口转换成自己希望的另外一个接口。比如获取到后端传来的数据,但这个数据不是我们想要的格式, 这个时候就可以用适配器方法来转换一下 - 装饰器模式
是指在不改变原对象的基础上,通过对其进行包装拓展(添加属性或者方法)使原有对象可以满足用户更复杂的需求 - 代理模式
代理(proxy)是一个对象,它可以用来控制对另外一个对象的访问, 例如defineProperty(), 例如es6 Proxy
行为型
- 发布-订阅者模式
比如说redux、vuex是为了解决模块之间通信的,实际上解决的是主体对象和观察者之间的耦合, 例如 vue 中用的 bus - 策略模式
策略模式是定义一系列算法,把它们一个个封装起来,并且使他们可以相互替换
例如 ifelse改写成一个对象存储方法 - 迭代器模式
这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。js里es6的iterator就是迭代器模式就能很好的体现这个设计模式 - 观察者模式
例如vue中的dep和watcher实现响应式