实验19:中介者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解中介者模式的动机,掌握该模式的结构;
2、能够利用中介者模式解决实际问题。
[实验任务一]:虚拟聊天室
在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:
1. 新的具体聊天室中发送的图片大小不得超过20M。
2. 新的具体聊天室中发送的文字长度不得超过100个字符。
3. 新的具体会员类可以发送图片信息和文本信息。
4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。
修改客户端测试类,注意原有系统类代码和客户端代码的修改。
类图
源代码
package org.example; import java.util.ArrayList; import java.util.List; abstract class ChatRoom { protected List<Member> members = new ArrayList<>(); protected List<String> messages = new ArrayList<>(); // 添加成员 public void addMember(Member member) { members.add(member); } // 移除成员 public void removeMember(Member member) { members.remove(member); } // 发送信息 public abstract void sendMessage(Member sender, String message); } package org.example; import java.text.SimpleDateFormat; import java.util.Date; class ConcreteChatRoom extends ChatRoom { private static final int MAX_TEXT_LENGTH = 100; // 最大文字长度 private static final int MAX_IMAGE_SIZE = 20 * 1024 * 1024; // 最大图片大小 20MB @Override public void sendMessage(Member sender, String message) { // 如果是文本消息,检查长度 if (message.length() > MAX_TEXT_LENGTH) { System.out.println("消息内容超出最大字数限制!"); return; } // 否则将消息保存 messages.add(sender.getName() + ": " + message); System.out.println("发送成功: " + message); } // 发送图片 public void sendImage(Member sender, byte[] image) { if (image.length > MAX_IMAGE_SIZE) { System.out.println("图片大小超出最大限制!"); return; } System.out.println(sender.getName() + " 发送了一张图片"); } // 获取聊天记录 public void printMessages() { for (String message : messages) { System.out.println(message); } } } package org.example; import java.text.SimpleDateFormat; import java.util.Date; class ConcreteMember extends Member { private ConcreteChatRoom chatRoom; public ConcreteMember(String name, ConcreteChatRoom chatRoom) { super(name); this.chatRoom = chatRoom; this.chatRoom.addMember(this); // 加入聊天室 } // 发送文本信息,并附加时间 @Override public void sendMessage(String message) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String timeStamp = sdf.format(new Date()); String messageWithTime = message + " (发送时间: " + timeStamp + ")"; chatRoom.sendMessage(this, messageWithTime); } // 发送图片信息 public void sendImage(byte[] image) { chatRoom.sendImage(this, image); } } package org.example; abstract class Member { protected String name; public Member(String name) { this.name = name; } // 发送信息 public abstract void sendMessage(String message); public String getName() { return name; } } package org.example; public class Main { public static void main(String[] args) { // 创建聊天室 ConcreteChatRoom chatRoom = new ConcreteChatRoom(); // 创建会员 ConcreteMember member1 = new ConcreteMember("Alice", chatRoom); ConcreteMember member2 = new ConcreteMember("Bob", chatRoom); // 会员发送文本消息 member1.sendMessage("你好,Bob!"); member2.sendMessage("你好,Alice!"); // 发送超长文本消息 member1.sendMessage("这是一个非常长的消息,超过了最大字数限制..."); // 发送图片 byte[] image = new byte[15 * 1024 * 1024]; // 模拟一张小于 20MB 的图片 member1.sendImage(image); // 发送超过 20MB 的图片 byte[] largeImage = new byte[25 * 1024 * 1024]; // 超过 20MB member2.sendImage(largeImage); // 打印聊天记录 System.out.println("\n聊天记录:"); chatRoom.printMessages(); } }
标签:String,void,模式,发送,中介,chatRoom,message,public From: https://www.cnblogs.com/pinganxile/p/18639661