中介者模式(Mediator Pattern)_中介者模式顺序图

boyanx2天前技术教程1

#程序员##Java##设计模式#

1. 理论:

中介者模式是一种行为型设计模式,它通过引入中介者对象来简化多个类之间的通信。中介者模式的主要目标是促进松散耦合,以便代码易于维护和修改。中介者对象本质上是封装了一个类集合中的行为模式。

主要组成部分:

中介者 (Mediator):定义了同事对象到中介者对象的接口。
具体中介者 (ConcreteMediator):实现中介者的接口并协调各同事对象的交互。
同事类 (Colleague):定义了中介者对象的接口,如果对象之间的交互复杂,则同事类可以是一个抽象类,具有一些实现方法。

2. 实践:

假设我们有一个聊天室应用,其中有多个用户。每个用户可以向聊天室发送消息,聊天室再将这些消息广播给其他用户。在这种情况下,聊天室就是中介者,用户是同事类。

代码示例:

定义中介者和同事接口:

interface ChatMediator {
    void sendMessage(String msg, User user);
    void addUser(User user);
}

abstract class User {
    protected ChatMediator mediator;
    protected String name;

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

    public abstract void send(String message);
    public abstract void receive(String message);
}

实现具体的中介者和同事类:

class ChatRoom implements ChatMediator {
    private List<User> users;

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

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

    @Override
    public void sendMessage(String msg, User user) {
        for (User u : users) {
            // message should not be received by the user sending it
            if (u != user) {
                u.receive(msg);
            }
        }
    }
}

class ChatUser extends User {
    public ChatUser(ChatMediator mediator, String name) {
        super(mediator, name);
        mediator.addUser(this);
    }

    @Override
    public void send(String message) {
        System.out.println(this.name + " is sending: " + message);
        mediator.sendMessage(message, this);
    }

    @Override
    public void receive(String message) {
        System.out.println(this.name + " received: " + message);
    }
}

测试中介者模式:

public class MediatorPatternDemo {
    public static void main(String[] args) {
        ChatMediator chatMediator = new ChatRoom();

        User user1 = new ChatUser(chatMediator, "Alice");
        User user2 = new ChatUser(chatMediator, "Bob");
        User user3 = new ChatUser(chatMediator, "Charlie");

        user1.send("Hello, everyone!");
        user2.send("Hi Alice!");
        user3.send("Hey Alice and Bob!");
    }
}

解释:

  • 在这个示例中,ChatRoom是一个具体的中介者,它维护了一个用户列表并提供了向用户发送消息的方法。ChatUser是一个具体的同事类,它有发送和接收消息的方法。
  • 当ChatUser发送消息时,它会调用ChatRoom的sendMessage方法,然后ChatRoom会将消息广播给其他用户。

这种模式的主要优点是它简化了对象之间的通信,将对象之间的依赖关系集中在一个中介者对象上,从而降低了系统的耦合度。

标签: chatroom

相关文章

为什么堂堂微信数据库表名、字段名起的如此随意?

1.微信数据库解密微信数据库在在哪个文件夹EnMicroMsg.db的父文件加密规则是md5("mm" + uin)这样就可以准确的获取到db文件的位置.uin的获取:/data/da...

linux下C++ socket网络编程——即时通信系统(含源码)

一:项目内容本项目使用C++实现一个具备服务器端和客户端即时通信且具有私聊功能的聊天室。目的是学习C++网络开发的基本概念,同时也可以熟悉下Linux下的C++程序编译和简单MakeFile编写二:需...

500 份源码合集——GitHub 热点速览 v.21.02

作者:HelloGitHub-小鱼干GitHub 项目名,如同变量命名,一个好的项目名能让你一眼就知道它是什么。500-AI-Machine-learning-Deep-learning-Comput...

Chinese Toy Maker Haivivi Raises $28M Series A to Lead the AI Toy Revolution

TMTPOST -- Chinese AI toy pioneer Haivivi has secured US$28 million in a Series A funding round, pos...

Jessi,晒度假海报_jessi,晒度假海报怎么画

本月12日,杰西在自己的instagram上写道:“The bullies entering The chatroom in 3……2…1”并上传了多张照片。公开的照片中是杰西穿着比基尼摆姿势的样子。...

python实现微信群消息自动转发简明教程

基本思路是,用 Python 模拟微信网页版登陆,接收到群里消息后,对文本、图片、分享等各类消息类型分别处理,并转发至其他群。主要源头是使用itchat,itchat是一个开源的微信个人号接口,pyt...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。