Java學設計模式之中介者模式

Kllin發表於2024-05-10

一、中介者模式概念

1.1 什麼是中介者模式

中介者模式是一種行為型設計模式,它透過將物件之間的互動行為集中到一箇中介者物件中來解耦物件之間的關聯。這種模式被用來減少物件之間的直接通訊,從而降低了系統的耦合度,使得系統易於維護和擴充套件。

結構

中介者模式通常包含以下幾個要素:

  1. Mediator(中介者): 定義了一個介面用於各個同事物件之間的通訊。通常包含一個或多個方法用於定義不同的互動行為。

  2. ConcreteMediator(具體中介者): 實現了中介者介面,負責協調各個同事物件之間的互動行為。具體中介者通常包含對各個同事物件的引用,並且透過這些引用來進行通訊。

  3. Colleague(同事): 定義了一個介面用於與其他同事物件通訊的方法。同事物件透過中介者來通訊,而不是直接相互引用。

  4. ConcreteColleague(具體同事): 實現了同事介面,每個具體同事物件都知道它的中介者物件,並且與其他同事物件通訊時,透過中介者來進行。

二、中介者模式程式碼

2.1 中介者

public interface ChatRoomMediator {
    void sendMessage(String message, User user);
}

2.2 同事

public abstract class User {
    private String name;
    private ChatRoomMediator mediator;

    public User(String name, ChatRoomMediator mediator) {
        this.name = name;
        this.mediator = mediator;
    }

    String getName() {
        return name;
    }

    void sendMessage(String message) {
        mediator.sendMessage(message, this);
    }

    abstract void receiveMessage(String message);

}

2.3 具體同事

public class BasicUser extends User {
    public BasicUser(String name, ChatRoomMediator mediator) {
        super(name, mediator);
    }

    @Override
    void receiveMessage(String message) {
        System.out.println(getName() + " 收到訊息: " + message);
    }
}

2.4 測試類

public class MediatorPatternTest {
    public static void main(String[] args) {
        ChatRoomMediator mediator = new ChatRoom();
        BasicUser user1 = new BasicUser("User1", mediator);
        BasicUser user2 = new BasicUser("User2", mediator);

        user1.sendMessage("Hello,User2!");
        user2.sendMessage("Hi,User1!");

        // 輸出:
        // User1 傳送訊息: Hello,User2!
        // User2 傳送訊息: Hi,User1!
    }
}

三、總結

中介者模式的優點包括:

  • 減少了物件之間的直接耦合,使得系統易於維護和擴充套件。
  • 可以集中控制物件之間的互動行為,使得互動邏輯更加清晰。

缺點包括:

  • 中介者物件可能會變得比較複雜,特別是當系統中有大量同事物件時。
  • 中介者模式可能會導致中介者物件過於集中化,使得系統的結構變得複雜。

相關文章