前言
最近小鹹兒又開始和小夥伴們一起學習設計模式了,這次的學習其實是建立在之前的幾次學習之上的,所以很多內容理解起來更加的快速和深入了,所以小鹹兒先來總結一波兒~~
敘述
寶圖
定義
使用中介者模式來集中相關對象之間複雜的溝通和控制方式。也就是說:用一箇中介者對象來封裝一系列對象的交互,從而達到使對象之間鬆耦合的效果。
優點
- 通過將對象彼此解耦,可以增加對象的複用性
- 通過將控制邏輯集中,可以簡化系統維護
- 可以讓對象之間所傳遞的消息變得簡單而且大幅減少
用途和缺點
- 中介者嚐嚐被用來協調相關的GUI組件
- 中介者模式的缺點是,如果設計不當,中介者對象本身會變得過於複雜
實例
在實例中,有一個公司,每個同事都和其他的同事直接關聯,如果有什麼交接工作的話也會自己去直接找他,日久天長之後,發現每個人需要負責聯繫的人都太多了,而且很容易負責的工作都搞不清,無法進行正常的交接。這個時候中介者出現了,同事們不在關心,我需要和誰進行交接,直接關心中介者就好了,我說的話,做的事情,中介者會負責幫我傳遞的,這樣大家就職責清晰了。接下來就是具體的代碼實現:
代碼實現
Mediator:中介者定義一個接口用於與各個同事對象(Colleague)通信
package pattern.builder.mediator;
/**
* 定義抽象Mediator,可以與同事們進行聯絡
* @author Phyllis
* @date 2019年6月30日17:05:00
*/
public abstract class Mediator {
/**
* 轉達通信
* @param content 通信內容
* @param coll 誰傳達的
*/
public abstract void contact(String content, Colleague coll);
}
ConcreteMediator:具體中介者通過協調各個同事對象實現協作行爲,瞭解並維護它的各個同事
package pattern.builder.mediator;
/**
* 具體中介者類
* @author Phyllis
* @date 2019年6月30日17:32:08
*/
public class ConcreteMediator extends Mediator{
ColleagueA collA;
ColleagueB collB;
public ColleagueA getCollA(){
return collA;
}
public void setCollA(ColleagueA collA) {
this.collA = collA;
}
public ColleagueB getCollB() {
return collB;
}
public void setCollB(ColleagueB collB) {
this.collB = collB;
}
@Override
public void contact(String content, Colleague coll) {
if (coll == collA){
collB.getMessage(content);
}else {
collA.getMessage(content);
}
}
}
ConcreteMediator:抽象同事類
package pattern.builder.mediator;
/**
* 定義抽象同事類
* @author Phyllis
* @date 2019年6月30日17:06:28
*/
public abstract class Colleague {
protected String name;
protected Mediator mediator;
public Colleague(String name, Mediator mediator){
this.name = name;
this.mediator = mediator;
}
}
ConcreteMediator:具體同事類。每個具體同事類都只需要知道自己的行爲即可,但是都需要認識中介者
- 具體同事A:
package pattern.builder.mediator;
/**
* 具體同事A
* @author Phyllis
* @date 2019年6月30日17:09:13
*/
public class ColleagueA extends Colleague{
/**
* 具體同事類繼承自Colleague,此刻就可以與中介者mediator進行通信了
* @param name 姓名
* @param mediator 中介者
*/
public ColleagueA(String name, Mediator mediator){
super(name,mediator);
}
public void getMessage(String message){
System.out.println("同事A"+name+"獲得信息:"+message);
}
/**
* 同事A與中介者通信
* @param message 通信內容
*/
public void contact(String message){
mediator.contact(message,this);
}
}
- 具體同事B:
package pattern.builder.mediator;
/**
* 具體同事B
* @author Phyllis
* @date 2019年6月30日17:15:54
*/
public class ColleagueB extends Colleague{
/**
* 具體同事類繼承自Colleague,此刻就可以與中介者mediator進行通信了
* @param name 姓名
* @param mediator 中介者
*/
public ColleagueB(String name, Mediator mediator){
super(name,mediator);
}
public void getMessage(String message){
System.out.println("同事B"+name+"獲得信息:"+message);
}
/**
* 同事B與中介者通信
* @param message 信息
*/
public void contact(String message){
mediator.contact(message,this);
}
}
總結
中介者模式其實就是找了一箇中間人,大家都不互相聯繫了,直接和中間人聯繫,做什麼事情也讓他代爲傳達,以達到解耦的目的,但是在日常使用起來還是有很多需要注意的地方,一不小心這個中間人就會過於複雜。
感謝您的閱讀~~