2023/10/23 每日总结
今天完成了设计模式实验19
实验19:中介者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解中介者模式的动机,掌握该模式的结构;
2、能够利用中介者模式解决实际问题。
[实验任务一]:虚拟聊天室
在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:
1. 新的具体聊天室中发送的图片大小不得超过20M。
2. 新的具体聊天室中发送的文字长度不得超过100个字符。
3. 新的具体会员类可以发送图片信息和文本信息。
4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。
修改客户端测试类,注意原有系统类代码和客户端代码的修改。
源代码
package org.test19; public interface ChatMediator { void sendMessage(Message message, Member member); } package org.test19; public class Client { public static void main(String[] args) { ChatMediator chatMediator = new ConcreteChatMediator(); Member member1 = new ConcreteMember("Alice", chatMediator); Member member2 = new ConcreteMember("Bob", chatMediator); member1.sendMessage(new TextMessage("Hello, how are you?")); member2.sendMessage(new ImageMessage(15 * 1024 * 1024)); // This should work member1.sendMessage(new TextMessage("I'm good, thanks! How about you?")); member2.sendMessage(new ImageMessage(25 * 1024 * 1024)); } } package org.test19; public class ConcreteChatMediator implements ChatMediator{ @Override public void sendMessage(Message message, Member member) { // 处理消息的发送逻辑 member.receiveMessage(message); } } package org.test19; public class ConcreteMember implements Member{ private String name; private ChatMediator chatMediator; ConcreteMember(String name, ChatMediator chatMediator) { this.name = name; this.chatMediator = chatMediator; } @Override public void sendMessage(Message message) { if (message != null) { // 在这里进行图片大小和文本长度的判断 if (message instanceof TextMessage) { if (((TextMessage) message).getContent().length() > 100) { System.out.println("Text message too long. Limit is 100 characters. Message not sent."); return; } } else if (message instanceof ImageMessage) { if (((ImageMessage) message).getSizeInMegaBytes() > 20) { System.out.println("Image size too large. Message not sent."); return; } } chatMediator.sendMessage(message, this); } else { System.out.println("Message not sent."); } } @Override public void receiveMessage(Message message) { if (message != null) { System.out.println(name + " received: " + message.getContent()); } else { System.out.println(name + " did not receive the message."); } } } package org.test19; public class ImageMessage extends Message{ private int sizeInBytes; ImageMessage(int sizeInBytes) { this.sizeInBytes = sizeInBytes; } int getSizeInMegaBytes() { return sizeInBytes / (1024 * 1024); } @Override public String getContent() { return "Image Size: " + sizeInBytes + " bytes"; } } package org.test19; public interface Member { void sendMessage(Message message); void receiveMessage(Message message); } package org.test19; public abstract class Message { public abstract String getContent(); } package org.test19; public class TextMessage extends Message{ private String content; TextMessage(String content) { this.content = content; } @Override public String getContent() { return content; } }