11.27日报

完成设计模式实验十九,以下为今日实验内容:

实验19:中介者模式

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

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

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

 
   

 

 

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

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

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

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

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

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

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

实验要求:

1.     画出对应的类图;

 

2.     提交源代码;

  1. // 抽象中介者
    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. 注意编程规范。

 

 

posted @ 2024-11-27 10:57  Code13  阅读(22)  评论(0)    收藏  举报