什麼是中介者模式(Mediator)?

世界上並沒有完美的程序,但是我們並不因此而沮喪,因爲寫程序就是一個不斷追求完美的過程。

  1. 意圖
    定義一個對象,封裝一組對象的交互,降低對象之間的耦合度,對象之間無需顯示引用,並且可以單獨改變對象的交互方式。
  2. 類圖
    在這裏插入圖片描述
  3. 實例
// 對象間通信形式
interface Mediator{
    void sendMessage(String message);
    String receiveMessage();
}

class MediatorImpl1 implements Mediator{
    private String message;
    @Override
    public void sendMessage(String message) {
        this.message = message;
    }

    @Override
    public String receiveMessage() {
        return message;
    }
}

// 聊天室形式
class SimpleMediator{
    public static void showMessage(Me me, String message){
        System.out.println(me.getName() + " send " + message);
    }
}

class Me{
    private String name;
    private String message;

    // 發送消息通過Mediator解耦合
    public void sendMessage(){
        SimpleMediator.showMessage(this, message);
    }

    public void sendMessage1(Mediator mediator){
        mediator.sendMessage(message);
        System.out.println("send : " + message);
    }

    public void receiveMessage1(Mediator mediator){
        String re = mediator.receiveMessage();
        System.out.println("re : " + re);
    }

    public static Me create(){
        return new Me();
    }

    public String getName() {
        return name;
    }

    public Me setName(String name) {
        this.name = name;
        return this;
    }

    public String getMessage() {
        return message;
    }

    public Me setMessage(String message) {
        this.message = message;
        return this;
    }
}

  1. 測試
class MediatorTest{
    public static void main(String[] args) {
        Me me1 = Me.create().setName("h1").setMessage("hello m2");
        Me me2 = Me.create().setName("h2").setMessage("hello m1");

        System.out.println("第一種 --- ");
        me1.sendMessage();
        me2.sendMessage();

        System.out.println("第二種 --- ");
        MediatorImpl1 mediatorImpl1 = new MediatorImpl1();
        System.out.println("me1 發送:");
        me1.sendMessage1(mediatorImpl1);
        System.out.println("me2 接收:");
        me2.receiveMessage1(mediatorImpl1);
    }
}

運行結果:

第一種 --- 
h1 send hello m2
h2 send hello m1
第二種 --- 
me1 發送:
send : hello m2
me2 接收:
re : hello m2

想看更多嗎?請訪問:設計模式

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