标签:聊天室 name Message 模式 中介 message public String
实验19:中介者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解中介者模式的动机,掌握该模式的结构;
2、能够利用中介者模式解决实际问题。
[实验任务一]:虚拟聊天室
在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:
1. 新的具体聊天室中发送的图片大小不得超过20M。
2. 新的具体聊天室中发送的文字长度不得超过100个字符。
3. 新的具体会员类可以发送图片信息和文本信息。
4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。
修改客户端测试类,注意原有系统类代码和客户端代码的修改。
实验要求:
1. 画出对应的类图;
2.提交源代码;
abstract class ChatRoom {
// 聊天室名称
private String name;
public ChatRoom(String name) {
this.name = name;
}
public String getName() {
return name;
}
// 抽象方法,用于发送消息,具体实现由子类完成
public abstract void sendMessage(Message message);
}
abstract class Member {
// 会员名称
private String name;
public Member(String name) {
this.name = name;
}
public String getName() {
return name;
}
// 抽象方法,用于发送消息,具体实现由子类完成
public abstract void sendMessage(Message message);
}
class Message {
private String text;
private byte[] imageData;
public Message(String text, byte[] imageData) {
this.text = text;
this.imageData = imageData;
}
public String getText() {
return text;
}
public byte[] getImageData() {
return imageData;
}
}
class LimitedChatRoom extends ChatRoom {
public LimitedChatRoom(String name) {
super(name);
}
@Override
public void sendMessage(Message message) {
if (message.getText()!= null && message.getText().length() > 100) {
System.out.println("发送的文字长度超过100个字符,无法发送。");
return;
}
if (message.getImageData()!= null && message.getImageData().length > 20 * 1024 * 1024) {
System.out.println("发送的图片大小超过20M,无法发送。");
return;
}
// 这里可以添加实际发送消息的逻辑,比如将消息发送到服务器等
System.out.println("消息已成功发送。");
}
}
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
class DetailedMember extends Member {
public DetailedMember(String name) {
super(name);
}
@Override
public void sendMessage(Message message) {
if (message.getText()!= null) {
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String timestampedText = message.getText() + " [" + now.format(formatter) + "]";
message = new Message(timestampedText, message.getImageData());
}
// 这里假设已经有一个聊天室对象chatRoom,实际应用中需要正确获取或传入
ChatRoom chatRoom = new LimitedChatRoom("示例聊天室");
chatRoom.sendMessage(message);
}
}
public class ClientTest {
public static void main(String[] args) {
// 创建具体聊天室对象
ChatRoom limitedChatRoom = new LimitedChatRoom("测试聊天室");
// 创建具体会员对象
Member detailedMember = new DetailedMember("测试会员");
// 创建文本消息并发送
Message textMessage = new Message("这是一条测试文本消息", null);
detailedMember.sendMessage(textMessage);
// 创建图片消息(这里只是模拟,实际需要读取真实图片数据)
byte[] mockImageData = new byte[10 * 1024 * 1024]; // 模拟10M的图片数据
Message imageMessage = new Message(null, mockImageData);
detailedMember.sendMessage(imageMessage);
}
}
标签:聊天室,
name,
Message,
模式,
中介,
message,
public,
String
From: https://www.cnblogs.com/Christmas77/p/18642624