Java设计模式之中介者模式

该博客围绕Java 23种设计模式中的中介者模式展开,以QQ聊天功能为需求案例,介绍了如何创建用户接口、用户实体类、QQ接口及实体类,实现一对一和群组聊天,最终成功解耦对象关系,客户端只需关注消息收发信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java23种设计模式

定义:中介者模式为多个互相关联的对象提供服务,使多个对象都与中介者关联,实现对象之间的解耦。

需求:QQ聊天功能,有用户ABCD,其中任意两人之间均可聊天,也可以建群一个人说话所有人都收到。

在这里插入图片描述

  1. 创建用户接口,用于接收信息
public interface User {
    void showMessage(String msg);
}
  1. 创建ABCD四个用户实体类
public class A implements User{
    @Override
    public void showMessage(String msg) {
        System.out.print("A"+msg+"\n");
    }
}
public class B implements User{
    @Override
    public void showMessage(String msg) {
        System.out.print("B"+msg+"\n");
    }
}
public class C implements User{
    @Override
    public void showMessage(String msg) {
        System.out.print("C"+msg+"\n");
    }
}
public class D implements User{
    @Override
    public void showMessage(String msg) {
        System.out.print("D"+msg+"\n");
    }
}
  1. 创建QQ接口,接口中有一对一聊天方法,创建群接口以及群发消息接口。
public interface QQ {
    void setMessage(User from,User to,String msg);
    void addUser(User user);
    void setAllMessage(User from,String msg);
}
  1. 创建QQ实体类,并分别实现一对一聊天以及群组聊天。
public class QQManager implements QQ{
    private Set<User> list = new HashSet<>();
    @Override
    public void setMessage(User from,User to,String msg) {
        from.showMessage("发送"+msg+"成功!");
        to.showMessage("接收"+msg+"成功!");
    }

    @Override
    public void addUser(User user) {
        list.add(user);
    }

    @Override
    public void setAllMessage(User from,String msg) {
        if(!list.contains(from)) list.add(from);
        from.showMessage("发送"+msg+"成功!");
        for(User user:list){
            user.showMessage("接收"+msg+"成功!");
        }
    }
}
  1. 客户端实现逻辑
public class Test {
    public static void main(String[] args) {
        A a = new A();
        B b = new B();
        C c = new C();
        D d = new D();
        QQManager manager = new QQManager();
        manager.addUser(a);
        manager.addUser(b);
        manager.addUser(c);
        manager.addUser(d);

        manager.setMessage(a,b,"你好");
        manager.setMessage(d,a,"干嘛呢?");
        manager.setAllMessage(a,"大家上班啦!");
    }
}

打印结果:

A发送你好成功!
B接收你好成功!
D发送干嘛呢?成功!
A接收干嘛呢?成功!
A发送大家上班啦!成功!
B接收大家上班啦!成功!
D接收大家上班啦!成功!
A接收大家上班啦!成功!
C接收大家上班啦!成功!

这样做成功解耦了ABCD四个对象之间的关系,客户端只需要知道谁发消息?谁收消息?什么消息?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值