天天看點

23設計模式-中介者模式(行為型模式)中介者模式

中介者模式

中介者模式将圍繞着智能家居項目簡介
  1. 智能家庭包括各種裝置,鬧鐘、咖啡機、電視機、窗簾等
  2. 主人要看電視時,各個裝置可以協同工作,自動完成看電視的準備工作,比如流程為:鬧鐘響起=>咖啡機開始工作=>窗簾自動落下=>電視機開始播放

傳統解決方案

client調用clock開啟方法,clock開啟完畢後,調用TV開啟方法,TV開啟完畢後調用curtain開啟方法
23設計模式-中介者模式(行為型模式)中介者模式

傳統解決方案總結

  1. 缺點:但各電器對象有多種狀态改變時,互相之間的調用關系會比較複雜
  2. 缺點:各個電器對象彼此聯系,互相聚合,不利于松耦合
  3. 各電器之間所傳遞的消息(參數),容易混亂
  4. 當系統增加一個新的電器對象時,或者執行流程改變時,代碼的可維護性、擴充性都不理想=>使用中介者模式

中介者模式解決方案

基本介紹

  1. 中介者模式(Mediator Pattern),用一個中介對象來封裝一些列的對象互動,中介者使用各對象不需要顯示的互相引用,進而使其耦合松散,而且可以獨立的改變它們之間的互動
  2. 如MVC模式,C(Controller)控制器是M(Model)模型和V(View)視圖的中介者,在前後端互動時起到中間人作用

Mediator:是一個抽象中介者,定義了同僚對象到中介者對象的接口

Colleague:是一個抽象的同僚類

ConcreteMediator:是一個具體的中介者對象,繼承了Mediator實作了相應的抽象方法,并且有集合保持着所有同僚類,并接收莫同僚對象的消息完成相應任務

ConcreteColleague:具體的同僚類,會有多個,每一個同僚隻知道自己的方法,與其它同僚類無關聯,它們都共同依賴着Mediator對象

23設計模式-中介者模式(行為型模式)中介者模式

中介者模式解決智能家居

Colleague:一個抽象同僚類,主要負責發送消息給中介(Mediator)中介收到相應的消息後會進行處理

Curtains/TV/Clock/Coffee:智能家居繼承Colleague實作sendMessage方法

Mediator:一個抽象的中介者,提供一個getMessage抽象方法

ConcreteMediator:具體的中介者實作繼承Mediator,其中維護者一個Colleague容器,當其中一個同僚調用sendMessage其實是調用了Mediator的getMessage方法,ConcreteMediator會通過不同的msg然後從Colleague取出相應的智能家居做一連串的動作,注意這裡做的動作全部都在ConcreteMediator完成

23設計模式-中介者模式(行為型模式)中介者模式

Colleague

Colleague:一個抽象的同僚類,構造方法傳入一個中介類初始化,getMediator方法傳回中介對象,sendMessage是一個抽象方法用于給子類實作發送消息給中介的一個方法
23設計模式-中介者模式(行為型模式)中介者模式

Clock/TV

Clock/TV:鬧鐘與電視智能家居,建構時會将自己注冊到中介者中,繼承Colleague重寫了父類方法,tv額外寫了一個startTv的方法用于開啟電視機
23設計模式-中介者模式(行為型模式)中介者模式

Coffee/Curtains

Coffee/Curtains:咖啡與窗簾智能家居,建構時會将自己注冊到中介者中,繼承Colleague重寫了父類方法,Coffee額外寫了一個startCoffee的方法用于開啟咖啡機
23設計模式-中介者模式(行為型模式)中介者模式

Mediator

Mediator:抽象的中介者,定義了3個重要的方法
23設計模式-中介者模式(行為型模式)中介者模式

ConcreteMediator

ConcreteMediator:具體的智能家居控制中心,裡面維護者一個智能家居的集合,register注冊智能家居時會按照不同類型的智能家居進行分類,getMessage重點方法,該方法是接收智能家居方法,并且做出相應的處理
23設計模式-中介者模式(行為型模式)中介者模式

Client

當鬧鐘準備好了,sendMessage消息給中介者,中介者在getMessage收到目前消息做出判斷,需要開啟鬧鐘和咖啡機
23設計模式-中介者模式(行為型模式)中介者模式

中介者模式總結

  1. 優點:使用中介者将解決個類之間互相依賴/調用的問題,将各類之間又網狀結構優化成星型結構
  2. 優點:減少類之間的依賴,降低耦合,符合迪米特原則
  3. 缺點:中介者承擔的責任比較多,一旦中介者出問題後,整個系統會受到影響
  4. 缺點:如果設計不當,中介者會變的更加複雜
上一篇: GTD