Java设计模式 _行为型模式_中介者模式

一、中介者模式
1、中介者模式
中介者模式(Mediator Pattern)是一种行为型模式。主要通过一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。

2、实现思路
(1)、定义实体对象的规范行为接口。
(2)、编写实现类,需要内置中介类。需要通过中介接收数据。
(3)、定义中介类,包含实体类对象的集合。将接收到的信息传送给具体的实现对象。

二、代码示例
1、示例场景
用户聊天室,张三发送消息到聊天室,李四可以接收;李四发送消息到聊天室,张三可以接收。
2、代码示例

// 1、定义用户规范行为
public interface User {
    void sendMsg(String msg, String reveiveUser);
    void receiveMsg(String msg);
    String getName();
}
// 2、定义中介类,包含用户类的集合,包含消息的转发实现
import org.springframework.util.CollectionUtils;

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

public class ChatRoom {
    static List<User> userList = new ArrayList<>();

    public void addUser(User user) {
        this.userList.add(user);
    }

    public void removeUser(String userName) {
        if (!CollectionUtils.isEmpty(userList)) {
            for (User user : userList) {
                if (user.getName().equals(userName)) {
                    this.userList.remove(user);
                }
            }
        }
    }

    public void sendMsg(User sender, String msg, String receiveName) {
        if (!CollectionUtils.isEmpty(userList)) {
            for (User user : userList) {
                if (user.getName().equals(receiveName)) {
                    user.receiveMsg(sender.getName() + "发送消息:" + msg);
                }
            }
        }
    }
}

// 3、定义用户的实现类
import lombok.Data;
@Data
public class ChatUser implements User {
    private String name;
    private ChatRoom chatRoom;

    public String getName() {
        return name;
    }

    public ChatUser(String name, ChatRoom chatRoom) {
        this.name = name;
        this.chatRoom = chatRoom;
    }

    @Override
    public void sendMsg(String msg, String reveiveUser) {
        chatRoom.sendMsg(this, msg, reveiveUser);
    }

    @Override
    public void receiveMsg(String msg) {
        System.out.println(msg);
    }
}
// 4、测试
public static void main(String[] args) {
        ChatRoom room = new ChatRoom();
        User user = new ChatUser("张三", room);
        User user1 = new ChatUser("李四", room);
        room.addUser(user);
        room.addUser(user1);
        Scanner scanner = new Scanner(System.in);
        int num = 0;
        while (true) {
            String msg = scanner.nextLine();
            if (num % 2 == 0) {
                user.sendMsg(msg, "李四");
            } else {
                user1.sendMsg(msg, "张三");
            }
            num++;
        }
    }

运行结果:
在这里插入图片描述
可以看到张三发送消息到聊天室,聊天室调用了李四的接收方法;李四发送消息到聊天室,聊天室调用了张三的接收方法。

总结:
中介者模式,顾名思义,就是通过中间人的介入完成不同业务之间的解耦行为。在生活中非常常见,放到代码中也很好理解。主要特点为实体对象和中介者产生关联,消费对象也和中介者产生关联。在代码实现上,一般多通过内置对象的形式,即对象实体内包含中介对象,中介对象内包含实体对象集合等,两者之间可以通过各自的方法去添加彼此。

学海无涯苦作舟!!!

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java设计模式中的行为模式共有11种,它们分别是策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式中介者模式和解释器模式。这些行为模式涉及到对象之间的交互和通信,用于解决不同对象之间的行为问题。其中,策略模式用于封装一系列的算法,让算法可以动态切换;模板方法模式用于定义算法的骨架,具体的实现由子类决定;观察者模式用于定义对象之间的一对多的依赖关系,当一个对象状态发生改变时,所有依赖该对象的对象都会收到通知;迭代器模式用于遍历集合对象的元素,而不暴露集合的内部结构;任链模式用于将请求的发送者和接收者解耦,每个接收者都可以选择处理请求或者将请求传递给下一个接收者;命令模式用于将请求封装成对象,从而可以更灵活地进行参数化和传递;备忘录模式用于保存和恢复对象的状态,以便在需要时可以回滚到之前的状态;状态模式用于根据对象的内部状态改变其行为;访问者模式用于将数据结构和操作分离,从而可以在不修改数据结构的情况下定义新的操作;中介者模式用于解耦多个对象之间的交互,使得各个对象可以独立地改变其行为;解释器模式用于定义一种语言的文法,并解释语言中的表达式。这些行为模式可以在不同场景下使用,根据具体的需求选择合适的模式来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值