1. 定義
又稱:調(diào)解者/調(diào)停者模式
包裝了一系列對(duì)象相互作用的方式,用來降低這些對(duì)象之間的通信復(fù)雜性奴饮,從中協(xié)調(diào)充當(dāng)牽線搭橋的作用
2. 使用場景
系統(tǒng)中對(duì)象之間存在比較復(fù)雜的引用關(guān)系襟交,導(dǎo)致它們之間的依賴關(guān)系結(jié)構(gòu)混亂迈倍,而且難以復(fù)用該對(duì)象
想通過一個(gè)中間類來封裝多個(gè)類中的行為,而又不想生成太多的子類
3. 優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
使得這些對(duì)象不必相互明顯作用捣域,從而實(shí)現(xiàn)松耦合
當(dāng)某些對(duì)象之間的作用發(fā)生改變時(shí)啼染,不會(huì)影響其他對(duì)象,保證獨(dú)立變化
將多對(duì)多的相互作用轉(zhuǎn)化為一對(duì)多的相互作用,由復(fù)雜的網(wǎng)狀結(jié)構(gòu)變?yōu)橐灾薪檎邽橹行牡男切徒Y(jié)構(gòu)
缺點(diǎn):中介者會(huì)龐大焕梅,變得復(fù)雜難以維護(hù)
4. Android源碼中的使用
Android的鎖屏(Keyguard)是一個(gè)非常重要的模塊迹鹅。包含的功能有:解鎖(指紋、圖案贞言、PIN等)斜棚、鎖屏通知顯示、快速啟動(dòng)相機(jī)该窗、快速撥號(hào)弟蚀、顯示日期/時(shí)間等。其中KeyguardViewMediator是整個(gè)待機(jī)解/鎖屏業(yè)務(wù)的調(diào)度器酗失,負(fù)責(zé)調(diào)度鎖屏界面的相關(guān)動(dòng)作及查詢解鎖屏狀態(tài)义钉,其中包含了許多XXXManager的管理器成員變量,如AlarmManager规肴,StatusBarManager捶闸,PowerManager等,KeyguardViewMediator則是充當(dāng)中介者協(xié)調(diào)這些管理器的狀態(tài)改變
Binder機(jī)制中ServiceManager和Binder Driver充當(dāng)中介者拖刃,協(xié)調(diào)服務(wù)端與客戶端
5. 實(shí)例演示
以電腦播放CD為例鉴嗤,主板作為中介者,協(xié)調(diào)cpu序调,內(nèi)存醉锅,顯卡,聲卡发绢,光驅(qū)等模塊硬耍,這些模塊間等通信都是通過主板進(jìn)行等垄琐,對(duì)其中任何一個(gè)進(jìn)行更改(如升級(jí)換新)都不會(huì)影響到其他模塊,只需要調(diào)整其與主板間到連接即可经柴,主板再通知其他模塊作出相應(yīng)調(diào)整
1. 首先創(chuàng)建一個(gè)中介者基類
2. 創(chuàng)建主板類
3. 創(chuàng)建一個(gè)模塊基類狸窘,相當(dāng)于實(shí)際中各模塊與主板連接的硬件接口協(xié)議或軟件驅(qū)動(dòng)協(xié)議,這些都是有統(tǒng)一標(biāo)準(zhǔn)的
4. 各模塊的實(shí)現(xiàn)類坯认,CPU翻擒,光驅(qū),聲卡牛哺,顯卡等, 從代碼中可以看到陋气,各模塊只負(fù)責(zé)自己職責(zé)范圍的工作,將處理結(jié)果通知給主板引润,由主板來協(xié)調(diào)下一步需要做什么巩趁,模塊間實(shí)現(xiàn)解耦
5創(chuàng)建實(shí)例,完成播放CD的流程
上面執(zhí)行cd播放的具體流程如下:
光驅(qū)調(diào)用load()方法讀取cd淳附,讀取完成后通知主板-->主板收到通知后议慰,將光驅(qū)讀取到的數(shù)據(jù)傳給cpu去解碼-->cpu解析數(shù)據(jù),解析完成后通知主板-->主板收到通知后奴曙,將cpu解碼出的音視頻流傳給聲卡, 顯卡播放-->聲卡顯卡播放音視頻, 至此就完成來cd的播放
我是今陽别凹,如果想要進(jìn)階和了解更多的干貨,歡迎關(guān)注公眾號(hào)”今陽說“接收我的最新文章