11.27日报
完成设计模式实验十九,以下为今日实验内容:
实验19:中介者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解中介者模式的动机,掌握该模式的结构;
2、能够利用中介者模式解决实际问题。
[实验任务一]:虚拟聊天室
在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:
1. 新的具体聊天室中发送的图片大小不得超过20M。
2. 新的具体聊天室中发送的文字长度不得超过100个字符。
3. 新的具体会员类可以发送图片信息和文本信息。
4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。
修改客户端测试类,注意原有系统类代码和客户端代码的修改。
实验要求:
1. 画出对应的类图;
2. 提交源代码;
- // 抽象中介者
interface Mediator {
void send(String message, Colleague colleague);
}
// 具体中介者
class ConcreteMediator implements Mediator {
private List<Colleague> colleagues;
public ConcreteMediator() {
this.colleagues = new ArrayList<>();
}
public void register(Colleague colleague) {
colleagues.add(colleague);
}
@Override
public void send(String message, Colleague colleague) {
for (Colleague c : colleagues) {
if (c != colleague) {
c.notify(message);
}
}
}
}
// 抽象同事类
abstract class Colleague {
protected Mediator mediator;
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
public abstract void send(String message);
public abstract void notify(String message);
}
// 聊天室
class ChatRoom extends Colleague {
private String name;
public ChatRoom(String name) {
this.name = name;
}
@Override
public void send(String message) {
mediator.send(message, this);
}
@Override
public void notify(String message) {
System.out.println(name + " received: " + message);
}
}
// 新的聊天室类
class NewChatRoom extends ChatRoom {
public NewChatRoom(String name) {
super(name);
}
@Override
public void send(String message) {
if (message.length() > 100) {
System.out.println("Message too long.");
return;
}
super.send(message);
}
}
// 会员类
class Member extends Colleague {
private String name;
public Member(String name) {
this.name = name;
}
@Override
public void send(String message) {
mediator.send(message, this);
}
@Override
public void notify(String message) {
System.out.println(name + " received: " + message);
}
}
// 新的会员类
class ImageTextMember extends Member {
public ImageTextMember(String name) {
super(name);
}
public void sendImage(String imagePath) {
// 检查图片大小逻辑
System.out.println(name + " sent an image from " + imagePath);
}
public void sendMessage(String message) {
String timeStampedMessage = message + " [" + new Date() + "]";
super.send(timeStampedMessage);
}
}
// 客户端测试类
public class ChatRoomTest {
public static void main(String[] args) {
Mediator mediator = new ConcreteMediator();
ChatRoom chatRoom1 = new ChatRoom("ChatRoom1");
ChatRoom chatRoom2 = new NewChatRoom("ChatRoom2");
Member member1 = new Member("Member1");
ImageTextMember imageTextMember = new ImageTextMember("ImageTextMember");
mediator.register(chatRoom1);
mediator.register(chatRoom2);
mediator.register(member1);
mediator.register(imageTextMember);
chatRoom1.setMediator(mediator);
chatRoom2.setMediator(mediator);
member1.setMediator(mediator);
imageTextMember.setMediator(mediator);
imageTextMember.sendMessage("Hello, ChatRoom2!");
imageTextMember.sendImage("path/to/image.jpg");
}
}
3. 注意编程规范。

浙公网安备 33010602011771号