1. 观察者模式
定义
- 又叫发布订阅模式
- 一种一对多的关系
- 让多个观察者对象(observer)同时监听某一个主题对象(subject),这个主题对象的状态发生变化时就会通知所有的观察者对象,使它们能够自动更新自己
优缺点
优点:
- 支持简单的广播通信,自动通知所有已经订阅过的对象
- 模块之间解耦
缺点:
- 所有观察者都通知到会花费很多时间,如订阅redux的组件
- 观察者和主题之间有循环依赖,会导致循环调用
注意:
在观察者模式中,通常情况下调用注册观察者后,会返回一个函数,用于移除监听
2. 迭代器模式
定义
- 又叫游标模式
- 提供一种方法顺序访问一个聚合对象中的每个元素,而又不需要暴露该对象的内部表示
优缺点
优点:
- 简化了遍历方式,对于hash表来说,支持迭代器模式后,遍历方便,如Map的for of迭代
- 封装性良好,用户只需要得到迭代器就可以遍历,而不用去关系遍历算法
缺点:
- 遍历过程是一个单向且不可逆的遍历
示例
let arr = ['a', 'b', 'c'];
let iter = arr[Symbol.iterator]();
iter.next();
// {value: 'a', done: false}