24.11.24
[实验任务一]:虚拟聊天室
在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:
-
新的具体聊天室中发送的图片大小不得超过20M。
-
新的具体聊天室中发送的文字长度不得超过100个字符。
-
新的具体会员类可以发送图片信息和文本信息。
-
新的具体会员类在发送文本信息时,可以在信息后加上时间。
修改客户端测试类,注意原有系统类代码和客户端代码的修改。
实验要求: -
画出对应的类图;
-
提交源代码;
Client:
package org.test.ruanjiansheji.zhongjiezhe;
public class Client {
public static void main(String[] args) {
ChatMediator chatRoom = new ImageTextChatRoom();
Member alice = new EnhancedMember(chatRoom, "张三");
Member bob = new EnhancedMember(chatRoom, "李四");
chatRoom.addMember(alice);
chatRoom.addMember(bob);
// 测试发送文本信息
alice.sendMessage("hello world");
bob.sendMessage("这是一条超过字符限制的消息...".repeat(10)); // 超过100字符
// 测试发送图片
alice.sendImage("image1.jpg", 10); // 合法大小
bob.sendImage("large_image.png", 25); // 超过20MB限制
}
}
ImageTextChatRoom:
package org.test.ruanjiansheji.zhongjiezhe;
// 新的具体聊天室
public class ImageTextChatRoom extends AbstractChatMediator {
@Override
public void sendMessage(String message, Member sender) {
if (message.length() > 100) {
System.out.println(sender.name + " 的消息超过100字符,发送失败。");
} else {
System.out.println(sender.name + " 在聊天室中发送消息: " + message);
broadcastMessage(message, sender);
}
}
@Override
public void sendImage(String imageName, int size, Member sender) {
if (size > 20) {
System.out.println(sender.name + " 的图片超过20MB,发送失败。");
} else {
System.out.println(sender.name + " 在聊天室中发送图片: " + imageName);
broadcastImage(imageName, sender);
}
}
}
EnhancedMember:
package org.test.ruanjiansheji.zhongjiezhe;
// 新的具体会员类
public class EnhancedMember extends Member {
public EnhancedMember(ChatMediator mediator, String name) {
super(mediator, name);
}
@Override
public void sendMessage(String message) {
String timestampedMessage = message + " [" + java.time.LocalTime.now() + "]";
System.out.println(name + " 发送文本信息: " + timestampedMessage);
mediator.sendMessage(timestampedMessage, this);
}
@Override
public void sendImage(String imageName, int size) {
System.out.println(name + " 尝试发送图片: " + imageName + " 大小: " + size + "MB");
mediator.sendImage(imageName, size, this);
}
@Override
public void receiveMessage(String message) {
System.out.println(name + " 收到消息: " + message);
}
@Override
public void receiveImage(String imageName) {
System.out.println(name + " 收到图片: " + imageName);
}
}
Member:
package org.test.ruanjiansheji.zhongjiezhe;
// 抽象会员类
public abstract class Member {
protected ChatMediator mediator;
protected String name;
public Member(ChatMediator mediator, String name) {
this.mediator = mediator;
this.name = name;
}
public abstract void sendMessage(String message);
public abstract void sendImage(String imageName, int size);
public abstract void receiveMessage(String message);
public abstract void receiveImage(String imageName);
}
ChatMediator :
package org.test.ruanjiansheji.zhongjiezhe;
public interface ChatMediator {
void sendMessage(String message, Member sender);
void sendImage(String imageName, int size, Member sender);
void addMember(Member member);
}
AbstractChatMediator:
package org.test.ruanjiansheji.zhongjiezhe;
import java.util.ArrayList;
import java.util.List;
// 抽象中介者
public abstract class AbstractChatMediator implements ChatMediator {
protected List
@Override
public void addMember(Member member) {
members.add(member);
}
protected void broadcastMessage(String message, Member sender) {
for (Member member : members) {
if (member != sender) {
member.receiveMessage(message);
}
}
}
protected void broadcastImage(String imageName, Member sender) {
for (Member member : members) {
if (member != sender) {
member.receiveImage(imageName);
}
}
}
}
- 注意编程规范。