实验19:中介者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解中介者模式的动机,掌握该模式的结构;
2、能够利用中介者模式解决实际问题。
[实验任务一]:虚拟聊天室
在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:
1. 新的具体聊天室中发送的图片大小不得超过20M。
2. 新的具体聊天室中发送的文字长度不得超过100个字符。
3. 新的具体会员类可以发送图片信息和文本信息。
4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。
修改客户端测试类,注意原有系统类代码和客户端代码的修改。
实验要求:
1.
画出对应的类图;
2.
提交源代码;
ChatRoomMediator.java
// 中介者接口
interface ChatRoomMediator {
void send(String
text, Member member);
void send(Image
image, Member member);
}
ImageAndTextChatRoom.java
// 具体中介者类
class ImageAndTextChatRoom implements ChatRoomMediator {
@Override
public void
send(String text, Member member) {
if
(text.length() <= 100) {
System.out.println(member + " @ " + new java.util.Date() +
" : " + text);
} else {
System.out.println("Text message is too long.");
}
}
@Override
public void
send(Image image, Member member) {
if
(image.size <= 20 * 1024 * 1024) {
System.out.println(member + " sent an image: " + image.path);
} else {
System.out.println("Image size exceeds 20MB.");
}
}
}
Member.java
// 抽象会员类
abstract class Member {
protected
ChatRoomMediator mediator;
protected String
name;
public
Member(ChatRoomMediator mediator, String name) {
this.mediator
= mediator;
this.name =
name;
}
public abstract
void sendText(String text);
public abstract
void sendImage(Image image);
}
TimeStampedMember.java
// 具体的会员类
class TimeStampededMember extends Member {
public
TimeStampededMember(ChatRoomMediator mediator, String name) {
super(mediator, name);
}
@Override
public void
sendText(String text) {
mediator.send(text, this);
}
@Override
public void
sendImage(Image image) {
mediator.send(image, this);
}
@Override
public String
toString() {
return name;
}
}
Image.java
// 图片类
class Image {
public String
path;
public long size;
public
Image(String path, long size) {
this.path =
path;
this.size =
size;
}
}
MediatorPatternDemo.java
public class MediatorPatternDemo {
public static
void main(String[] args) {
ChatRoomMediator mediator = new ImageAndTextChatRoom();
Member
member1 = new TimeStampededMember(mediator, "Member1");
Member
member2 = new TimeStampededMember(mediator, "Member2");
Image image =
new Image("image.jpg", 15 * 1024 * 1024); // 15MB图片
member1.sendText("Hello, this is a test message.");
member2.sendImage(image);
member1.sendText("This message is way too long to be sent through
the chat room, it will be truncated or rejected by the system.");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律