前面的文章里面,已經(jīng)非常仔細的介紹了觀察者模式和中介者模式涯穷。
其中,他們的UML圖和代碼實現(xiàn)藏雏,甚至是實現(xiàn)的邏輯也是非常相似的拷况。為了不讓兩個設(shè)計模式混淆,所以在此做了此篇文章用于區(qū)別它們的異同诉稍。
1.基本定義區(qū)別:
觀察者模式:
:察者模式屬于行為型模式蝠嘉,指多個對象間存在一對多的依賴關(guān)系,當一個對象的狀態(tài)發(fā)生改變時杯巨,所有依賴于它的對象都得到通知并被自動更新蚤告。這種模式有時又稱作發(fā)布-訂閱模式、模型-視圖模式服爷。
中介者模式:
中介者模式杜恰,屬于行為型模式;定義一個中介對象來封裝一系列對象之間的交互仍源,使原有對象之間的耦合松散心褐,且可以獨立地改變它們之間的交互。中介者模式又叫調(diào)停模式笼踩,它是迪米特法則的典型應用逗爹。
分析:
a:都屬于行為型模式
b:都為了處理一對多的關(guān)系
2.URML圖區(qū)別:
觀察者模式:
中介者模式:
分析:
a:處理業(yè)務邏輯的對象都被抽象化(ConcreteColleague和ConcreteObserver都符合單一職責)
b:中介者和觀察者都有統(tǒng)一管理的list集合。
c:都有循環(huán)通知的方法
3.使用場景
觀察者模式:只能從從一的一方循環(huán)的通知嚎于,屬于單向掘而。(好比上課挟冠,只能老實授課給班上所有的學生,反過來不行)
中介者模式:可以從任一方循環(huán)通知袍睡,屬于雙向知染。(好比分享會,每個人都可以分享自己的事情給別人)
總結(jié):
從上面幾個分析總結(jié)如下:
相同點:
1:都屬于行為型模式
2:都為了處理一對多的關(guān)系
3:UML實現(xiàn)基本相同斑胜,都有集合管理業(yè)務對象的集合控淡,都有循環(huán)通知的方法,符合單一職責原則止潘。
不同點:
1:使用場景不同掺炭,觀察者屬于單向,中介者屬于雙向