首页 > 其他分享 >软件设计: 实验19:中介者模式

软件设计: 实验19:中介者模式

时间:2024-11-28 21:11:47浏览次数:5  
标签:String mediator 19 void 中介 软件设计 image message public

实验19:中介者模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 

1、理解中介者模式的动机,掌握该模式的结构;

2、能够利用中介者模式解决实际问题。

 

[实验任务一]:虚拟聊天室

在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:

1. 新的具体聊天室中发送的图片大小不得超过20M。

2. 新的具体聊天室中发送的文字长度不得超过100个字符。

3. 新的具体会员类可以发送图片信息和文本信息。

4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。

修改客户端测试类,注意原有系统类代码和客户端代码的修改。

实验要求:

1. 画出对应的类图;

2. 提交源代码;

3. 注意编程规范。

 

1.

 

2.

// 抽象中介者类

abstract class Mediator {

    public abstract void send(String message, Client client);

    public abstract void sendImage(String image, Client client);

}

 

// 具体中介者类

class ChatRoomMediator extends Mediator {

    private List<Client> clients = new ArrayList<>();

 

    public void addClient(Client client) {

        clients.add(client);

    }

 

    @Override

    public void send(String message, Client client) {

        for (Client c : clients) {

            if (c != client) {

                c.receive(message);

            }

        }

    }

 

    @Override

    public void sendImage(String image, Client client) {

        for (Client c : clients) {

            if (c != client) {

                c.receiveImage(image);

            }

        }

    }

}

 

// 抽象客户端类

abstract class Client {

    protected Mediator mediator;

    protected String name;

 

    public Client(Mediator mediator, String name) {

        this.mediator = mediator;

        this.name = name;

    }

 

    public abstract void sendMessage(String message);

    public abstract void sendImage(String image);

    public abstract void receive(String message);

    public abstract void receiveImage(String image);

}

 

// 具体客户端类

class ConcreteChatRoom extends Client {

    public ConcreteChatRoom(Mediator mediator, String name) {

        super(mediator, name);

    }

 

    @Override

    public void sendMessage(String message) {

        if (message.length() <= 100) {

            mediator.send(message, this);

        }

    }

 

    @Override

    public void sendImage(String image) {

        if (image.getBytes().length <= 20 * 1024 * 1024) {

            mediator.sendImage(image, this);

        }

    }

 

    @Override

    public void receive(String message) {

        System.out.println(name + " received message: " + message);

    }

 

    @Override

    public void receiveImage(String image) {

        System.out.println(name + " received image.");

    }

}

 

// 新的具体客户端类

class NewClient extends Client {

    public NewClient(Mediator mediator, String name) {

        super(mediator, name);

    }

 

    @Override

    public void sendMessage(String message) {

        if (message.length() <= 100) {

            mediator.send(message + " [" + new Date() + "]", this);

        }

    }

 

    @Override

    public void sendImage(String image) {

        if (image.getBytes().length <= 20 * 1024 * 1024) {

            mediator.sendImage(image, this);

        }

    }

 

    @Override

    public void receive(String message) {

        System.out.println(name + " received message: " + message);

    }

 

    @Override

    public void receiveImage(String image) {

        System.out.println(name + " received image.");

    }

}

 

// 客户端测试类

public class ChatRoomTest {

    public static void main(String[] args) {

        ChatRoomMediator mediator = new ChatRoomMediator();

        ConcreteChatRoom chatRoom1 = new ConcreteChatRoom(mediator, "ChatRoom1");

        ConcreteChatRoom chatRoom2 = new ConcreteChatRoom(mediator, "ChatRoom2");

        NewClient newClient = new NewClient(mediator, "NewClient");

 

        mediator.addClient(chatRoom1);

        mediator.addClient(chatRoom2);

        mediator.addClient(newClient);

 

        chatRoom1.sendMessage("Hello, World!");

        newClient.sendMessage("Hello, New World!");

        chatRoom1.sendImage("image1.jpg");

        newClient.sendImage("image2.jpg");

    }

}

标签:String,mediator,19,void,中介,软件设计,image,message,public
From: https://www.cnblogs.com/xuan-2004/p/18575186

相关文章

  • 博图V19或者更高版本上更新HMI面板映像(非unified)
    面板映像西门子的面板映像包含的是面板的操作系统,需要安装的映像版本必须和TIAWincc的版本一致。当出现如下报错的时候,意味着你需要:1.尝试更改设备版本以适配HMI上本身的系统版本。2.当找不到适合的版本,就要去官网下载对应博图版本的images并安装,下载地址在sios官网上......
  • 鲲鹏ARM64环境、银河麒麟KylinOSV10 下源码移植安装MariaDB 10.5.19参考
    1硬件鲲鹏920处理器2操作系统银河麒麟V10SP33配置编译环境3.1配置代理3.1.1打开/etc/profile文件vim/etc/profile3.1.2在/etc/profile文件中增加以下内容(根据实际情况填写)。exporthttp_proxy="http://用户名:密码@代理IP:代理端口"exporthttps_proxy=......
  • AT_nikkei2019_2_qual_d Shortest Path on a Line 题解
    洛谷题目传送门AT题目传送门博客园可能食用更佳学校内部模拟赛出了这题,顺便来写下题解。惊奇的发现题解区居然全是建图跑最短路,这怎么行,所以这一篇题解并没有跑任何最短路,而是使用了线段树优化DP。考虑将建边区间按右端点从小到大排序,每次以右端点为枚举编号,记作\(x\),发......
  • 每日一题:https://codeforces.com/contest/1999/problem/D
    题目链接:https://codeforces.com/contest/1999/problem/D#include<iostream>#include<string>#include<vector>usingnamespacestd;intmain(){intn;cin>>n;for(;n>0;n--){stringarr1;stringarr2;......
  • P1979 [NOIP2013 提高组] 华容道
    题目大意详细题目传送门\(n\timesm\)的华容道盘,有障碍。多组询问,每组障碍不变。其中要将初始在\((sx,sy)\)的棋子移动到\((tx,ty)\)。初始空白的位置在\((ex,ey)\)。求至少多少次移动完成目标,无法完成输出-1。\(n,m\leq30,q\leq500\)。思路发现显然应该是要预处理什......
  • Qt CDB 调试器 版本 10.0.18362 - 针对Win10 1909
    https://blog.csdn.net/gitblog_09702/article/details/143015214 QtCDB调试器版本10.0.18362-针对Win101909【下载地址】QtCDB调试器版本10.0.18362-针对Win101909QtCDB调试器版本10.0.18362-针对Win101909项目地址:https://gitcode.com/open-source-toolkit......
  • 用VC2019+MFC 创建一个DLL封装MD工业相机库然后用EXE调用这个相机库采图并且显示
    主要描述:用VC2019+MFC创建一个DLL封装MD工业相机库,再建一个EXE调用这个相机库采图并且显示。先创建库工程:新建一个库工程,创建完成,添加一个DllFunction.h头文件,一个DllFunction.cpp源文件拷贝相关SDK文件到对应的目录下(略,自行拷贝到相应位置,路径加进工程)源码如下D......
  • ACFIM0019 Financial Management
    ACFIM0019FinancialManagementDecember2024Overview•   Yoursummative courseworkrepresents 100% of the finalmark fortheunit.•   The coursework is in the form of three pieces of reports (see detailed requirements in the ......
  • 软件设计:实验2:简单工厂模式
    实验2:简单工厂模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解简单工厂模式的动机,掌握该模式的结构;2、能够利用简单工厂模式解决实际问题。 [实验任务一]:女娲造人使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参......
  • 软件设计:实验1:UML与面向对象程序设计原则
    实验1:UML与面向对象程序设计原则本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、掌握面向对象程序设计中类与类之间的关系以及对应的UML类图;2、理解面向对象程序设计原则。 [实验任务一]:UML复习阅读教材第一章复习UML,回答下述问题:面向对象程序设计中类与类的关......