本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解中介者模式的动机,掌握该模式的结构;
2、能够利用中介者模式解决实际问题。
[实验任务一]:虚拟聊天室
在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:
1. 新的具体聊天室中发送的图片大小不得超过20M。
2. 新的具体聊天室中发送的文字长度不得超过100个字符。
3. 新的具体会员类可以发送图片信息和文本信息。
4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。
修改客户端测试类,注意原有系统类代码和客户端代码的修改。
实验要求:
1. 画出对应的类图;
2. 提交源代码;
3. 注意编程规范。
1、类图
2、源代码
package org.example;
import java.util.ArrayList;
import java.util.List;
abstract class ChatRoom {
protected List<Member> members = new ArrayList<>();
protected List<String> messages = new ArrayList<>();
// 添加成员
public void addMember(Member member) {
members.add(member);
}
// 移除成员
public void removeMember(Member member) {
members.remove(member);
}
// 发送信息
public abstract void sendMessage(Member sender, String message);
}
package org.example;
import java.text.SimpleDateFormat;
import java.util.Date;
class ConcreteChatRoom extends ChatRoom {
private static final int MAX_TEXT_LENGTH = 100; // 最大文字长度
private static final int MAX_IMAGE_SIZE = 20 * 1024 * 1024; // 最大图片大小 20MB
@Override
public void sendMessage(Member sender, String message) {
// 如果是文本消息,检查长度
if (message.length() > MAX_TEXT_LENGTH) {
System.out.println("消息内容超出最大字数限制!");
return;
}
// 否则将消息保存
messages.add(sender.getName() + ": " + message);
System.out.println("发送成功: " + message);
}
// 发送图片
public void sendImage(Member sender, byte[] image) {
if (image.length > MAX_IMAGE_SIZE) {
System.out.println("图片大小超出最大限制!");
return;
}
System.out.println(sender.getName() + " 发送了一张图片");
}
// 获取聊天记录
public void printMessages() {
for (String message : messages) {
System.out.println(message);
}
}
}
package org.example;
import java.text.SimpleDateFormat;
import java.util.Date;
class ConcreteMember extends Member {
private ConcreteChatRoom chatRoom;
public ConcreteMember(String name, ConcreteChatRoom chatRoom) {
super(name);
this.chatRoom = chatRoom;
this.chatRoom.addMember(this); // 加入聊天室
}
// 发送文本信息,并附加时间
@Override
public void sendMessage(String message) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timeStamp = sdf.format(new Date());
String messageWithTime = message + " (发送时间: " + timeStamp + ")";
chatRoom.sendMessage(this, messageWithTime);
}
// 发送图片信息
public void sendImage(byte[] image) {
chatRoom.sendImage(this, image);
}
}
package org.example;
abstract class Member {
protected String name;
public Member(String name) {
this.name = name;
}
// 发送信息
public abstract void sendMessage(String message);
public String getName() {
return name;
}
}
package org.example;
public class Main {
public static void main(String[] args) {
// 创建聊天室
ConcreteChatRoom chatRoom = new ConcreteChatRoom();
// 创建会员
ConcreteMember member1 = new ConcreteMember("Alice", chatRoom);
ConcreteMember member2 = new ConcreteMember("Bob", chatRoom);
// 会员发送文本消息
member1.sendMessage("你好,Bob!");
member2.sendMessage("你好,Alice!");
// 发送超长文本消息
member1.sendMessage("这是一个非常长的消息,超过了最大字数限制...");
// 发送图片
byte[] image = new byte[15 * 1024 * 1024]; // 模拟一张小于 20MB 的图片
member1.sendImage(image);
// 发送超过 20MB 的图片
byte[] largeImage = new byte[25 * 1024 * 1024]; // 超过 20MB
member2.sendImage(largeImage);
// 打印聊天记录
System.out.println("\n聊天记录:");
chatRoom.printMessages();
}
}
3、运行截图
标签:String,19,void,中介,发送,实验,chatRoom,message,public From: https://www.cnblogs.com/yuanxinglan/p/18551671