介紹
中介者持有多個對象的引用, 而多個對象中只持有中介者的引用,這樣, 這些對象之間沒有依賴關系, 對象之間的交互都是通過中介者來完成的.
以PC為例, 主板就是中介者, CPU, 顯卡, IO設備, 這些部件之間的交互都是通過主板來完成的, 這些對象之間不直接調用對方, 這樣就避免了對象之間過多的依賴關系.
android 源碼中的使用
屏幕解鎖功能的實現, KeyguardViewMediator作為中介者, 協調幾個manager之間的交互.
public class KeyguardViewMediator {
private AlarmManager mAlarmManager;
private AudioManager mAudioManager;
private StatusBarManager mStatusBarManager;
private PowerManager mPM;
}
使用場景
登錄界面的實現.
登錄界面中, 一般包含賬戶輸入框, 密碼輸入框, 確定按鈕,取消按鈕, 保存密碼checkbox, 自動登錄checkbox, 這樣6個控件.
這些控制之間的狀態是互相有影響的, 例如只有當賬戶和密碼輸入框都不為空的時候, 確認按鈕才是可點擊的狀態, 否則置灰顯示.
按照之前的實現思路是, 為每個控件設置text_change_listener, text change時,根據自己的狀態, 去設置其他控件的狀態. 這樣做,想想代碼就會非常的亂.
好的解決方案是, 讓Activity作為中介者, 每個控件設置自己的text_change_listener, 當text change時, 都去調用activity的change()方法.
在change()中, 統一根據各個控件的情況去設置其他控件的狀態(是否置灰顯示, 是否可點擊), 這樣就避免了各個控件直接去設置其他控件的狀態.
代碼會非常的整潔和好維護.
-----DONE.-------