用一箇中介對象封裝一系列的對象交互,中介者使各對象不須要顯示地相互做用,從而使其耦合鬆散,當某些對象之間的做用發生改變時,不會當即影響其餘的一些對象之間的做用。保證這些做用能夠彼此獨立的變化。中介者將多對多的相互做用轉化爲一對多的相互做用。中介者模式將對象的行爲和協做抽象化,把對象在小尺度的行爲上與其餘對象的相互做用分開處理。前端
Mediator:抽象中介者角色,定義了同事對象到中介者對象的接口,通常以抽象類的方式實現。java
ConcreteMediator:具體中介者角色,繼承於抽象中介者,實現了父類定義的方法,它從具體的同事對象接收消息,向具體同事對象發出命令。框架
Colleague:抽象同事類角色,定義了中介者對象的接口,它只知道中介者而不知道其餘的同事對象。ide
ConcreteColleague A/B:具體同事類角色,繼承於抽象同事類,每一個具體同事類都知道自己在小範圍內的行爲,而不知道它在大範圍內的目的。this
中介者模式適用於多個對象之間緊密耦合的狀況,緊密耦合的標準是:在類圖中出現了蜘蛛網狀結構。在這種狀況下必定要考慮使用中介者模式,這有利於把蜘蛛網梳理成星型結構,使本來複雜混亂的關係變得清晰簡單。spa
// 抽象中介類 public abstract class Mediator { protected ConcreteColleagueA colleagueA; protected ConcreteColleagueB colleagueB; /** * 抽象中介方法,子類實現 */ public abstract void method(); public void setColleagueA(ConcreteColleagueA colleagueA) { this.colleagueA = colleagueA; } public void setColleagueB(ConcreteColleagueB colleagueB) { this.colleagueB = colleagueB; } } // 抽象同事類 public abstract class Colleague { protected Mediator mediator; // 中介者對象 public Colleague(Mediator mediator) { this.mediator = mediator; } /** * 同事角色的具體行爲,由子類去實現 */ public abstract void action(); } // 具體中介類 public class ConcreteMediator extends Mediator { @Override public void method() { colleagueA.action(); colleagueB.action(); } } // 具體同事 A public class ConcreteColleagueA extends Colleague { public ConcreteColleagueA(Mediator mediator) { super(mediator); } @Override public void action() { System.out.println("能夠本身處理"); } // 業務上有依賴的方法,本身處理不了交給中介者 public void dependActionA() { super.mediator.method(); } } // 具體同事 B public class ConcreteColleagueB extends Colleague { public ConcreteColleagueB(Mediator mediator) { super(mediator); } @Override public void action() { System.out.println("能夠本身處理"); } // 業務上有依賴的方法,本身處理不了交給中介者 public void dependActionB() { super.mediator.method(); } } /** * 客戶方法 */ public void client() { Mediator mediator = new ConcreteMediator(); ConcreteColleagueA colleagueA = new ConcreteColleagueA(mediator); ConcreteColleagueB colleagueB = new ConcreteColleagueB(mediator); mediator.setColleagueA(colleagueA); mediator.setColleagueB(colleagueB); // mediator.method(); colleagueA.action(); colleagueA.dependActionA(); }
- MVC框架
MVC框架中的C(Controller)就是一箇中介者,叫作前端控制器(Front Controller),它的做用就是把M(Model,業務邏輯)和V(View,視圖)隔離開。因此咱們經常使用的Activity就是一箇中介者。code
- KeyguardViewMediator.java