設計模式之中介者模式

一.什麼是中介者模式

中介者模式是一種行爲性設計模式,降低多個類或對象之間的通信複雜性,提供一種中介類,處理不同的類之間的交互,降低各類之間的耦合性,使得代碼更利於維護。

二.中介者模式怎麼寫

所謂的中介者就像一個路由一樣,承擔着路由的作用,使得各個端不在吃過對方的引用,都是通過路由來進行訪問,想像一下,中介者就像聯合國,各個端點就像是各個國家,各個國家都是通過路由來進行交互。來看下面的UML類圖。在這裏插入圖片描述
上代碼:

/**
 *
 * @author Seven
 *
 */
public abstract class Mediator {

	protected abstract void sendMessage(String msg,Colleague colleague);
}

/**
 * @author Seven
 *
 */
public class ConcreteMediator extends Mediator {

	public ChinaColleague chinaColleague;
	public UsaColleague usaColleague;

	public ConcreteMediator() {
		super();

	}

	@Override
	protected void sendMessage(String msg, Colleague colleague) {
		if (colleague == usaColleague) {
			chinaColleague.noticeMessage(msg);
			return;

		}
		if (colleague == chinaColleague) {
			usaColleague.noticeMessage(msg);
			return;
		}

	}

}

/**
 * 無須知道各個國家,通過聯合國來通信
 * @author Seven
 *
 */
public abstract class Colleague {

	protected Mediator mediator;
	
	public Colleague(Mediator mediator) {
		this.mediator=mediator;
	}
	
	
}


public class ChinaColleague  extends Colleague{

	public ChinaColleague(Mediator mediator) {
		super(mediator);
	}

	public void sendMessage(String msg) {
		mediator.sendMessage(msg,this);
	}
	
	public void noticeMessage(String msg) {
		System.out.println("中國收到消息:"+msg);
	}
}


public class UsaColleague  extends Colleague{

	public UsaColleague(Mediator mediator) {
		super(mediator);
	}

	public void sendMessage(String msg) {
		mediator.sendMessage(msg,this);
	}
	
	public void noticeMessage(String msg) {
		System.out.println("美國收到消息:"+msg);
	}
}

測試:

public class Client {

	public static void main(String[] args) {
		
		
		ConcreteMediator mediator=new ConcreteMediator(); //聯合國的創建
		
		ChinaColleague chinaColleague=new ChinaColleague(mediator); //讓中國知道聯合國
		UsaColleague usaColleague=new UsaColleague(mediator);//讓美國知道聯合國
		
		mediator.chinaColleague=chinaColleague; //中國加入聯合國
		mediator.usaColleague=usaColleague;//美國加入聯合國
		
		usaColleague.sendMessage("貿易戰搞起來?"); //美國通過聯合國向中國發聲
		chinaColleague.sendMessage("搞你妹啊,現在和平年代,和氣生財!"); //中國通過聯合國向美國迴應
		
		
	}
}

打印結果
中國收到消息:貿易戰搞起來?
美國收到消息:搞你妹啊,現在和平年代,和氣生財!

三.小結

作爲一種行爲性設計模式,它的優點有: 1、降低了類的複雜度,將一對多轉化成了一對一。 2、各個類之間的解耦。 3、符合迪米特原則(最少知道原則)。 缺點:中介者會龐大,變得複雜難以維護。
如果你覺得本文對你理解設計模式有丁點作用,歡迎點贊和評論,如果覺得寫得不好,歡迎您在下方吐槽。

發佈了57 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章