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號