24.11.24

[实验任务一]:虚拟聊天室
在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:

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

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

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

  4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。
    修改客户端测试类,注意原有系统类代码和客户端代码的修改。
    实验要求:

  5. 画出对应的类图;
    image

  6. 提交源代码;
    Client:
    package org.test.ruanjiansheji.zhongjiezhe;

public class Client {
public static void main(String[] args) {
ChatMediator chatRoom = new ImageTextChatRoom();

    Member alice = new EnhancedMember(chatRoom, "张三");
    Member bob = new EnhancedMember(chatRoom, "李四");

    chatRoom.addMember(alice);
    chatRoom.addMember(bob);

    // 测试发送文本信息
    alice.sendMessage("hello world");
    bob.sendMessage("这是一条超过字符限制的消息...".repeat(10)); // 超过100字符

    // 测试发送图片
    alice.sendImage("image1.jpg", 10); // 合法大小
    bob.sendImage("large_image.png", 25); // 超过20MB限制
}

}
ImageTextChatRoom:
package org.test.ruanjiansheji.zhongjiezhe;

// 新的具体聊天室
public class ImageTextChatRoom extends AbstractChatMediator {

@Override
public void sendMessage(String message, Member sender) {
    if (message.length() > 100) {
        System.out.println(sender.name + " 的消息超过100字符,发送失败。");
    } else {
        System.out.println(sender.name + " 在聊天室中发送消息: " + message);
        broadcastMessage(message, sender);
    }
}

@Override
public void sendImage(String imageName, int size, Member sender) {
    if (size > 20) {
        System.out.println(sender.name + " 的图片超过20MB,发送失败。");
    } else {
        System.out.println(sender.name + " 在聊天室中发送图片: " + imageName);
        broadcastImage(imageName, sender);
    }
}

}

EnhancedMember:
package org.test.ruanjiansheji.zhongjiezhe;

// 新的具体会员类
public class EnhancedMember extends Member {

public EnhancedMember(ChatMediator mediator, String name) {
    super(mediator, name);
}

@Override
public void sendMessage(String message) {
    String timestampedMessage = message + " [" + java.time.LocalTime.now() + "]";
    System.out.println(name + " 发送文本信息: " + timestampedMessage);
    mediator.sendMessage(timestampedMessage, this);
}

@Override
public void sendImage(String imageName, int size) {
    System.out.println(name + " 尝试发送图片: " + imageName + " 大小: " + size + "MB");
    mediator.sendImage(imageName, size, this);
}

@Override
public void receiveMessage(String message) {
    System.out.println(name + " 收到消息: " + message);
}

@Override
public void receiveImage(String imageName) {
    System.out.println(name + " 收到图片: " + imageName);
}

}
Member:
package org.test.ruanjiansheji.zhongjiezhe;

// 抽象会员类
public abstract class Member {
protected ChatMediator mediator;
protected String name;

public Member(ChatMediator mediator, String name) {
    this.mediator = mediator;
    this.name = name;
}

public abstract void sendMessage(String message);
public abstract void sendImage(String imageName, int size);
public abstract void receiveMessage(String message);
public abstract void receiveImage(String imageName);

}

ChatMediator :
package org.test.ruanjiansheji.zhongjiezhe;

public interface ChatMediator {
void sendMessage(String message, Member sender);
void sendImage(String imageName, int size, Member sender);
void addMember(Member member);
}
AbstractChatMediator:
package org.test.ruanjiansheji.zhongjiezhe;

import java.util.ArrayList;
import java.util.List;

// 抽象中介者
public abstract class AbstractChatMediator implements ChatMediator {
protected List members = new ArrayList<>();

@Override
public void addMember(Member member) {
    members.add(member);
}

protected void broadcastMessage(String message, Member sender) {
    for (Member member : members) {
        if (member != sender) {
            member.receiveMessage(message);
        }
    }
}

protected void broadcastImage(String imageName, Member sender) {
    for (Member member : members) {
        if (member != sender) {
            member.receiveImage(imageName);
        }
    }
}

}
image

  1. 注意编程规范。
posted @ 2024-11-24 18:35  起名字真难_qmz  阅读(7)  评论(0)    收藏  举报