Java设计模式——中介者模式

⚪中介者模式(Mediator)是一种行为型设计模式,中介者模式通过引入一个中介者对象,协调多个对象之间的交互,使得对象之间不需要显式地引用彼此。

⚪意图:它用于减少对象之间的直接通信,从而减少对象之间的耦合性,使系统更易于维护和扩展。

⚪以下是工厂方法模式的关键要点:

        ▷ 角色和责任

  1. 中介者(Mediator): 中介者是一个接口或抽象类,定义了用于协调对象之间交互的方法。具体的中介者类实现这些方法,管理对象之间的通信。
  2. 具体中介者(Concrete Mediator): 具体中介者类实现中介者接口,负责实际协调对象之间的通信。它通常维护一个对象的列表,跟踪这些对象的状态并决定如何进行通信。
  3. 同事(Colleague): 同事是指参与中介者模式的对象,它们之间的通信通过中介者进行。同事对象通常包含一个对中介者的引用。
  4. 具体同事类(Concrete Colleague): 具体同事类是同事的实现,它们实现了同事接口,负责实际的工作。

        ▷ 工作流程

  1. 各个同事对象将需要协调的信息发送给中介者对象。
  2. 中介者接收到信息后,根据具体的逻辑进行协调,并将相应的信息传递给其他同事对象。
  3. 同事对象接收到来自中介者的信息,并根据这些信息采取适当的行动。

        ▷ 示例

// 中介者接口
interface ChatMediator {
    void sendMessage(String message, User user);
}

// 具体中介者类
class ChatMediatorImpl implements ChatMediator {
    @Override
    public void sendMessage(String message, User user) {
        // 中介者负责处理消息的分发
        // 在实际应用中,这里可能包括消息的广播或特定用户的消息传递
        System.out.println(user.getName() + "发送了消息:" + message);
    }
}

// 同事接口
interface User {
    void sendMessage(String message);
    void receiveMessage(String message);
    String getName();
}

// 具体同事类
class ChatUser implements User {
    private String name;
    private ChatMediator mediator;

    public ChatUser(String name, ChatMediator mediator) {
        this.name = name;
        this.mediator = mediator;
    }

    @Override
    public void sendMessage(String message) {
        System.out.println(name + "发送了消息:" + message);
        mediator.sendMessage(message, this);
    }

    @Override
    public void receiveMessage(String message) {
        System.out.println(name + "收到了消息:" + message);
    }

    @Override
    public String getName() {
        return name;
    }
}

public class MediatorPatternExample {
    public static void main(String[] args) {
        ChatMediator mediator = new ChatMediatorImpl();
        
        User user1 = new ChatUser("User1", mediator);
        User user2 = new ChatUser("User2", mediator);
        User user3 = new ChatUser("User3", mediator);

        mediator.sendMessage("大家好!", user1);

        user1.sendMessage("有人在吗?");
        user2.sendMessage("是的,在这里!");
        user3.sendMessage("欢迎加入聊天!");
    }
}

⚪适用性

  1. 一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。
  2. 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象想定制一个分布在多个类中的行为,而又不想生成太多的子类。

⚪应用场景

  1. 多个对象之间存在复杂的相互通信关系: 当多个对象之间需要相互通信并且通信逻辑复杂时,中介者模式可以帮助简化通信和降低对象之间的耦合度。
  2. 对象之间的关系是多对多的: 如果对象之间的关系是复杂的多对多关系,直接的通信可能会变得混乱,中介者模式可以帮助整理这些关系。
  3. 对象行为的分发需要集中管理: 当需要集中管理对象的行为分发时,中介者模式可以将这些管理逻辑放置在中介者中,从而降低了对象之间的直接依赖关系。

⚪实际已有场景

  1. 聊天应用程序: 如前面示例所示,聊天应用程序中的消息传递可以使用中介者模式来管理,以确保用户之间的通信能够顺利进行。
  2. 游戏开发: 在多人在线游戏中,玩家之间的互动和通信可以通过中介者来协调。
  3. Spring MVC: Spring MVC(Model-View-Controller)是一种常见的 Web 应用程序开发框架,其中的控制器(Controller)可以看作是中介者。控制器接收请求并协调模型(Model)和视图(View)之间的交互。
  4. Spring Integration: Spring Integration 是 Spring 生态系统中的一个项目,它提供了一种在企业应用程序中实现消息传递模式的方式。它使用消息中介者来处理不同组件之间的消息传递。
  5. Spring Cloud: 在微服务架构中,不同的微服务需要相互通信,Spring Cloud 使用中介者模式来协调服务之间的通信,例如通过服务注册和发现来管理服务之间的依赖关系。

 

posted @ 2023-10-04 13:15  xiaogh  阅读(86)  评论(0)    收藏  举报