java_中介者模式

前言

  最近小鹹兒又開始和小夥伴們一起學習設計模式了,這次的學習其實是建立在之前的幾次學習之上的,所以很多內容理解起來更加的快速和深入了,所以小鹹兒先來總結一波兒~~


敘述

寶圖

在這裏插入圖片描述

定義

  使用中介者模式來集中相關對象之間複雜的溝通和控制方式。也就是說:用一箇中介者對象來封裝一系列對象的交互,從而達到使對象之間鬆耦合的效果。

優點

  • 通過將對象彼此解耦,可以增加對象的複用性
  • 通過將控制邏輯集中,可以簡化系統維護
  • 可以讓對象之間所傳遞的消息變得簡單而且大幅減少

用途和缺點

  • 中介者嚐嚐被用來協調相關的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);
    }
}

總結

  中介者模式其實就是找了一箇中間人,大家都不互相聯繫了,直接和中間人聯繫,做什麼事情也讓他代爲傳達,以達到解耦的目的,但是在日常使用起來還是有很多需要注意的地方,一不小心這個中間人就會過於複雜。

感謝您的閱讀~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章