Android原始碼設計模式-中介者模式

jamesehng發表於2018-07-08

簡要描述

中介者模式常見的定義關鍵字是mediator,是一種重要的設計模式,解決了多對多引用耦合,到一對多引用耦合的處理過程,某種程度上和觀察者在多個觀察者對應一個觀察者的模式很像。

成員關係

Android原始碼設計模式-中介者模式

官方定義

中介者模式(Mediator Pattern)是用來降低多個物件和類之間的通訊複雜性。這種模式提供了一箇中介類,該類通常處理不同類之間的通訊,並支援鬆耦合,使程式碼易於維護。中介者模式屬於行為型模式。

使用場景

多個物件符合的相互引用和影響,耦合太深,降低耦合,提高維護性,把多對多的關係變為一對多的關係。

在Android中的使用

具體的例子是KeyGuardViewMediator,這個類是負責鎖屏控制的一個類。 在我們的開屏和鎖屏的時候要注意會需要很多的控制,包括音效和狀態列,通知等,這些都對應AudioManager等具體的系統服務。所以需要一個統一的中介類來協調和控制各個管理服務的狀態。

KeyGuardViewMediator包括很多成員包括各個管理器類,比如 AlarmManager和AudioManager等,這些類都是物件。

舉一個過程就是,KeyGuardViewMediator的playSounds()方法就對應對AudioManager的一些列的狀態控制。

其實拋開這些,我們平常的MVC開發,對應Activity和View關係就是廣義的中介者模式,View是具體的Colleague類(同事類),而就是Mediator類,其中比較典型的就是onClickListener介面等回撥,View都是這個介面的例項,中介者模式我們在Android開發中每時每刻都在用。

中介者模式優缺點

優點:

簡化了物件之間的關係,將系統的各個物件之間的相互關係進行封裝,將各個同事類解耦,使得系統變為鬆耦合。 提供系統的靈活性,使得各個同事物件獨立而易於複用。

缺點:

中介者模式中,中介者角色承擔了較多的責任,所以一旦這個中介者物件出現了問題,整個系統將會受到重大的影響。 新增加一個同事類時,不得不去修改抽象中介者類和具體中介者類,此時可以使用觀察者模式和狀態模式來解決這個問題。

相關文章