使用一箇中介對象封裝一系列的對象交互,中介者使用對象不須要顯式的相互做用,從而實降現低耦合度,且能夠獨立改變被封裝的一些列對象之間的交互。java
中介者模式也叫作調停者模式:對象之間的依賴就像戰爭,很混亂,加入一箇中心,全部對象都和中心交流,接受中心的調停處理。編程
中介者模式一般有4個角色ide
AbstractColleague抽象同事類:抽象中介者角色。指定一箇中介者用於與其它同事之間的通訊。this
public abstract class AbstractColleague { protected AbstractMediator mediator; public AbstractColleague(AbstractMediator mediator) { this.mediator = mediator; } }
AbstractMediator抽象類:抽象中介者角色。定義統一的接口,用於各同事角色之間的通訊。code
public abstract class AbstractMediator { protected ColleagueOne colleagueOne; protected ColleagueTwo colleagueTwo; public ColleagueOne getColleagueOne() { return colleagueOne; } public ColleagueTwo getColleagueTwo() { return colleagueTwo; } public void setColleagueOne(ColleagueOne colleagueOne) { this.colleagueOne = colleagueOne; } public void setColleagueTwo(ColleagueTwo colleagueTwo) { this.colleagueTwo = colleagueTwo; } public abstract void executeOne(); public abstract void executeTwo(); }
Colleague類具體同事類:同事角色。每個同事角色都知道中介者角色,每個同事角色的行爲分爲兩種:一種是自身的行爲,用來改變自身的狀態或處理自身的業務邏輯,而且與其它同事和中介者沒有任何依賴關係,叫作自發行爲。另外一種是必須依賴中介者才能完成的行爲,叫作依賴方法。對象
public class ColleagueOne extends AbstractColleague { public ColleagueOne(AbstractMediator mediator) { super(mediator); } /** * 自發行爲 */ public void selfMethodOne() { // 處理本身的業務邏輯 System.out.println("ColleagueOne的自有方法"); } /** * 依賴行爲 */ public void depMethodOne() { // 處理本身的業務邏輯 System.out.println("ColleagueOne的依賴方法"); // 委託中介者處理 super.mediator.executeOne(); } } public class ColleagueTwo extends AbstractColleague { public ColleagueTwo(AbstractMediator mediator) { super(mediator); } /** * 自發行爲 */ public void selfMethodTwo() { // 處理本身的業務邏輯 System.out.println("ColleagueTwo的自有方法"); } /** * 依賴行爲 */ public void depMethodTwo() { // 處理本身的業務邏輯 System.out.println("ColleagueTwo的依賴方法"); // 委託中介者處理 super.mediator.executeTwo(); } }
Mediator類:通用中介者角色。協調各同事角色實現協做行爲,必須依賴各個同事角色。接口
public class Mediator extends AbstractMediator { @Override public void executeOne() { super.colleagueOne.selfMethodOne(); super.colleagueTwo.selfMethodTwo(); } @Override public void executeTwo() { super.colleagueTwo.selfMethodTwo(); super.colleagueOne.selfMethodOne(); } }
場景類get
public class Client { public static void main(String[] args) { // 定義中介者 AbstractMediator mediator = new Mediator(); // 定義同事類 ColleagueOne colleagueOne = new ColleagueOne(mediator); ColleagueTwo colleagueTwo = new ColleagueTwo(mediator); // 中介者注入同事類 mediator.setColleagueOne(colleagueOne); mediator.setColleagueTwo(colleagueTwo); colleagueOne.depMethodOne(); colleagueTwo.depMethodTwo(); } }
在面向對象的編程中,對象及對象之間必然會存在依賴關係,存在即合理,不必定有依賴關係則使用中介者模式。中介者模式適用於多個對象之間緊密耦合的狀況,類圖中出現了蜘蛛網狀結構。使用中介者模式有利於將蜘蛛網狀結構梳理爲星型結構。class