1. 觀察者模式
定義
- 又叫發(fā)布訂閱模式
- 一種一對(duì)多的關(guān)系
- 讓多個(gè)觀察者對(duì)象(observer)同時(shí)監(jiān)聽某一個(gè)主題對(duì)象(subject)州刽,這個(gè)主題對(duì)象的狀態(tài)發(fā)生變化時(shí)就會(huì)通知所有的觀察者對(duì)象婆跑,使它們能夠自動(dòng)更新自己
優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 支持簡(jiǎn)單的廣播通信,自動(dòng)通知所有已經(jīng)訂閱過的對(duì)象
- 模塊之間解耦
缺點(diǎn):
- 所有觀察者都通知到會(huì)花費(fèi)很多時(shí)間,如訂閱redux的組件
- 觀察者和主題之間有循環(huán)依賴,會(huì)導(dǎo)致循環(huán)調(diào)用
注意:
在觀察者模式中,通常情況下調(diào)用注冊(cè)觀察者后王滤,會(huì)返回一個(gè)函數(shù),用于移除監(jiān)聽
2. 迭代器模式
定義
- 又叫游標(biāo)模式
- 提供一種方法順序訪問一個(gè)聚合對(duì)象中的每個(gè)元素滓鸠,而又不需要暴露該對(duì)象的內(nèi)部表示
優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 簡(jiǎn)化了遍歷方式雁乡,對(duì)于hash表來說,支持迭代器模式后糜俗,遍歷方便踱稍,如Map的for of迭代
- 封裝性良好,用戶只需要得到迭代器就可以遍歷悠抹,而不用去關(guān)系遍歷算法
缺點(diǎn):
- 遍歷過程是一個(gè)單向且不可逆的遍歷
示例
let arr = ['a', 'b', 'c'];
let iter = arr[Symbol.iterator]();
iter.next();
// {value: 'a', done: false}