大三打卡(10.19)

实验19:中介者模式

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

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

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

 
   

 


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

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

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

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

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

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

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

实验要求:

1.     画出对应的类图;

 

2.     提交源代码;

 ChatRoomMediator.java

 

// 中介者接口

interface ChatRoomMediator {

    void send(String text, Member member);

    void send(Image image, Member member);

}

ImageAndTextChatRoom.java

 

// 具体中介者类

class ImageAndTextChatRoom implements ChatRoomMediator {

    @Override

    public void send(String text, Member member) {

        if (text.length() <= 100) {

            System.out.println(member + " @ " + new java.util.Date() + " : " + text);

        } else {

            System.out.println("Text message is too long.");

        }

    }

 

    @Override

    public void send(Image image, Member member) {

        if (image.size <= 20 * 1024 * 1024) {

            System.out.println(member + " sent an image: " + image.path);

        } else {

            System.out.println("Image size exceeds 20MB.");

        }

    }

}

Member.java

 

// 抽象会员类

abstract class Member {

    protected ChatRoomMediator mediator;

    protected String name;

 

    public Member(ChatRoomMediator mediator, String name) {

        this.mediator = mediator;

        this.name = name;

    }

 

    public abstract void sendText(String text);

    public abstract void sendImage(Image image);

}

 

TimeStampedMember.java

 

// 具体的会员类

class TimeStampededMember extends Member {

    public TimeStampededMember(ChatRoomMediator mediator, String name) {

        super(mediator, name);

    }

 

    @Override

    public void sendText(String text) {

        mediator.send(text, this);

    }

 

    @Override

    public void sendImage(Image image) {

        mediator.send(image, this);

    }

 

    @Override

    public String toString() {

        return name;

    }

}

 

Image.java

 

// 图片类

class Image {

    public String path;

    public long size;

 

    public Image(String path, long size) {

        this.path = path;

        this.size = size;

    }

}

 

MediatorPatternDemo.java

 

public class MediatorPatternDemo {

    public static void main(String[] args) {

        ChatRoomMediator mediator = new ImageAndTextChatRoom();

        Member member1 = new TimeStampededMember(mediator, "Member1");

        Member member2 = new TimeStampededMember(mediator, "Member2");

 

        Image image = new Image("image.jpg", 15 * 1024 * 1024); // 15MB图片

 

        member1.sendText("Hello, this is a test message.");

        member2.sendImage(image);

        member1.sendText("This message is way too long to be sent through the chat room, it will be truncated or rejected by the system.");

    }

}

 

posted @   夏季彼岸德  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示