一.什麼是中介者模式
中介者模式是一種行爲性設計模式,降低多個類或對象之間的通信複雜性,提供一種中介類,處理不同的類之間的交互,降低各類之間的耦合性,使得代碼更利於維護。
二.中介者模式怎麼寫
所謂的中介者就像一個路由一樣,承擔着路由的作用,使得各個端不在吃過對方的引用,都是通過路由來進行訪問,想像一下,中介者就像聯合國,各個端點就像是各個國家,各個國家都是通過路由來進行交互。來看下面的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、符合迪米特原則(最少知道原則)。 缺點:中介者會龐大,變得複雜難以維護。
如果你覺得本文對你理解設計模式有丁點作用,歡迎點贊和評論,如果覺得寫得不好,歡迎您在下方吐槽。