24.12.03
实验19:中介者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解中介者模式的动机,掌握该模式的结构;
2、能够利用中介者模式解决实际问题。
[实验任务一]:虚拟聊天室
在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:
1. 新的具体聊天室中发送的图片大小不得超过20M。
2. 新的具体聊天室中发送的文字长度不得超过100个字符。
3. 新的具体会员类可以发送图片信息和文本信息。
4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。
修改客户端测试类,注意原有系统类代码和客户端代码的修改。
实验要求:
1. 画出对应的类图;
2. 提交源代码;
3. 注意编程规范。
- 类图:

- 新增的源代码:
import java.time.LocalDateTime;
public class NewChatGroup extends AbstractChatGroup {
@Override
public void sendText(String from, String to, String message) {
if (message.length() > 100) {
System.out.println("文本信息过长,无法发送!");
} else {
System.out.println(from+"发送给"+ to +": " +message);
}
}
@Override
public void sendImage(String from, String to, String image) {
// 假设image是图片大小的字符串表示
try {
int imageSize = Integer.parseInt(image);
if (imageSize > 20) {
System.out.println("图片大小超过20M,无法发送!");
} else {
System.out.println(from+"发送图片给"+ to +": " +message);
}
} catch (NumberFormatException e) {
System.out.println("图片大小格式错误!");
}
}
}
import java.time.LocalDateTime;
public class NewMember extends Member {
public NewMember(String name) {
super(name);
}
@Override
public void sendText(String to, String message) {
String timestamp = LocalDateTime.now().toString();
System.out.println("新会员发送文本信息:");
chatroom.sendText(name, to, message + " [发送时间:" + timestamp + "]");
}
@Override
public void sendImage(String to, String image) {
System.out.println("新会员发送图片信息:");
chatroom.sendImage(name, to, image);
}
}
public class Client {
public static void main(String[] args) {
AbstractChatroom happyChat = new NewChatGroup();
Member member1, member2, member3, member4, member5, newMember;
member1 = new DiamondMember("张三");
member2 = new DiamondMember("李四");
member3 = new CommonMember("王五");
member4 = new CommonMember("小芳");
member5 = new CommonMember("小红");
newMember = new NewMember("新用户");
happyChat.register(member1);
happyChat.register(member2);
happyChat.register(member3);
happyChat.register(member4);
happyChat.register(member5);
happyChat.register(newMember);
member1.sendText("李四", "李四,你好!");
member2.sendText("张三", "张三,你好!");
newMember.sendText("张三", "今天是个好日子!");
newMember.sendImage("李四", "18"); // 假设图片大小为18M
newMember.sendImage("李四", "25"); // 图片大小超过限制
newMember.sendText("小红", "这是一段长文本测试......................................................................................");
}
}
浙公网安备 33010602011771号