中介者模式

title

中介者模式(Mediator Pattern)是一种行为型设计模式,它通过封装一系列对象之间的交互关系,来减少对象之间的耦合度。中介者模式将对象之间的交互行为集中在中介者对象中,从而降低了系统的复杂度,并提高了系统的可维护性和可扩展性。

在中介者模式中,中介者对象负责协调各个对象之间的交互行为,将各个对象之间的交互关系解耦出来。中介者模式包含三个核心角色:

  • 抽象中介者(Mediator):定义中介者的接口,负责协调各个对象之间的交互关系。
  • 具体中介者(ConcreteMediator):实现中介者接口,负责协调各个对象之间的交互行为。
  • 同事对象(Colleague):定义同事对象的接口,负责与中介者进行交互。
  • 具体同事对象(ConcreteColleague):实现同事对象的接口,与其他同事对象进行交互。

中介者模式的优点是:

  • 降低了系统的复杂度,将各个对象之间的交互关系集中在中介者对象中,减少了对象之间的耦合度。
  • 提高了系统的可维护性和可扩展性,由于对象之间的交互关系集中在中介者对象中,修改和扩展中介者对象比较容易。
  • 支持松耦合的设计,各个对象之间的交互行为可以通过中介者对象进行协调,从而实现松耦合的设计。

中介者模式的缺点是:

  • 中介者对象的设计较为复杂,需要考虑各个对象之间的交互关系,增加了系统的设计难度。
  • 在某些情况下,中介者对象可能会成为系统的瓶颈,降低系统的性能。

下面是一个使用中介者模式的简单示例代码,假设有两个同事类(UserA和UserB),它们之间的交互通过中介者类(ChatRoom)进行协调:

UserA.java:

public class UserA implements Colleague {
    private Mediator mediator;

    public UserA(Mediator mediator) {
        this.mediator = mediator;
    }

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

    public void receiveMessage(String message) {
        System.out.println("UserA received message: " + message);
    }
}

UserB.java:

public class UserB implements Colleague {
    private Mediator mediator;

    public UserB(Mediator mediator) {
        this.mediator = mediator;
    }

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

    public void receiveMessage(String message) {
        System.out.println("UserB received message: " + message);
    }
}

Mediator.java:

public interface Mediator {
    void sendMessage(String message, Colleague colleague);
}

ConcreteMediator.java:

import java.util.ArrayList;
import java.util.List;

public class ChatRoom implements Mediator {
    private List<Colleague> colleagues;

    public ChatRoom() {
        this.colleagues = new ArrayList<>();
    }

    public void addColleague(Colleague colleague) {
        this.colleagues.add(colleague);
    }

    public void sendMessage(String message, Colleague colleague) {
        for (Colleague c : colleagues) {
            if (c != colleague) {
                c.receiveMessage(message);
            }
        }
    }
}

使用中介者模式协调 UserA 和 UserB 的交互:

public class Main {
    public static void main(String[] args) {
        ChatRoom chatRoom = new ChatRoom();
        UserA userA = new UserA(chatRoom);
        UserB userB = new UserB(chatRoom);
        chatRoom.addColleague(userA);
        chatRoom.addColleague(userB);
        userA.sendMessage("Hello, UserB!");
        userB.sendMessage("Hi, UserA!");
    }
}

输出结果:

UserB received message: Hello, UserB!
UserA received message: Hi, UserA!
powered by Gitbook© 2023 编外计划 | 最后修改: 2023-11-24 03:37:01

results matching ""

    No results matching ""