中介者模式

实验19:中介者模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 

1、理解中介者模式的动机,掌握该模式的结构;

2、能够利用中介者模式解决实际问题。

 

[实验任务一]:虚拟聊天室

虚拟聊天室实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:

1. 新的具体聊天室中发送的图片大小不得超过20M

2. 新的具体聊天室中发送的文字长度不得超过100个字符。

3. 新的具体会员类可以发送图片信息和文本信息。

4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。

修改客户端测试类,注意原有系统类代码和客户端代码的修改。

实验要求:

1. 画出对应的类图

 

 

2.提交源代码

abstract class ChatRoom {

    // 聊天室名称

    private String name;

 

    public ChatRoom(String name) {

        this.name = name;

    }

 

    public String getName() {

        return name;

    }

 

    // 抽象方法,用于发送消息,具体实现由子类完成

    public abstract void sendMessage(Message message);

}

 

 

abstract class Member {

    // 会员名称

    private String name;

 

    public Member(String name) {

        this.name = name;

    }

 

    public String getName() {

        return name;

    }

 

    // 抽象方法,用于发送消息,具体实现由子类完成

    public abstract void sendMessage(Message message);

}

 

 

 

class Message {

    private String text;

    private byte[] imageData;

 

    public Message(String text, byte[] imageData) {

        this.text = text;

        this.imageData = imageData;

    }

 

    public String getText() {

        return text;

    }

 

    public byte[] getImageData() {

        return imageData;

    }

}

 

 

 

class LimitedChatRoom extends ChatRoom {

    public LimitedChatRoom(String name) {

        super(name);

    }

 

    @Override

    public void sendMessage(Message message) {

        if (message.getText()!= null && message.getText().length() > 100) {

            System.out.println("发送的文字长度超过100个字符,无法发送。");

            return;

        }

        if (message.getImageData()!= null && message.getImageData().length > 20 * 1024 * 1024) {

            System.out.println("发送的图片大小超过20M,无法发送。");

            return;

        }

        // 这里可以添加实际发送消息的逻辑,比如将消息发送到服务器等

        System.out.println("消息已成功发送。");

    }

}

 

 

 

import java.time.LocalDateTime;

import java.time.format.DateTimeFormatter;

 

class DetailedMember extends Member {

    public DetailedMember(String name) {

        super(name);

    }

 

    @Override

    public void sendMessage(Message message) {

        if (message.getText()!= null) {

            LocalDateTime now = LocalDateTime.now();

            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

            String timestampedText = message.getText() + " [" + now.format(formatter) + "]";

            message = new Message(timestampedText, message.getImageData());

        }

        // 这里假设已经有一个聊天室对象chatRoom,实际应用中需要正确获取或传入

        ChatRoom chatRoom = new LimitedChatRoom("示例聊天室");

        chatRoom.sendMessage(message);

    }

}

 

 

public class ClientTest {

    public static void main(String[] args) {

        // 创建具体聊天室对象

        ChatRoom limitedChatRoom = new LimitedChatRoom("测试聊天室");

 

        // 创建具体会员对象

        Member detailedMember = new DetailedMember("测试会员");

 

        // 创建文本消息并发送

        Message textMessage = new Message("这是一条测试文本消息", null);

        detailedMember.sendMessage(textMessage);

 

        // 创建图片消息(这里只是模拟,实际需要读取真实图片数据)

        byte[] mockImageData = new byte[10 * 1024 * 1024]; // 模拟10M的图片数据

        Message imageMessage = new Message(null, mockImageData);

        detailedMember.sendMessage(imageMessage);

    }

}

 

posted @ 2024-12-30 22:32  chrisrmas、  阅读(6)  评论(0)    收藏  举报