12.17

 

 

实验19:中介者模式

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

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

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

 

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

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

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

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

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

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

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

实验要求:

1. 画出对应的类图

 

2. 提交源代码

package org.test19;

 

public interface ChatMediator {

    void sendMessage(Message message, Member member);

}

 

 

package org.test19;

 

public class Client {

    public static void main(String[] args) {

        ChatMediator chatMediator = new ConcreteChatMediator();

 

        Member member1 = new ConcreteMember("Alice", chatMediator);

        Member member2 = new ConcreteMember("Bob", chatMediator);

 

        member1.sendMessage(new TextMessage("Hello, how are you?"));

        member2.sendMessage(new ImageMessage(15 * 1024 * 1024));  // This should work

        member1.sendMessage(new TextMessage("I'm good, thanks! How about you?"));

        member2.sendMessage(new ImageMessage(25 * 1024 * 1024));

 

    }

}

 

 

 

 

package org.test19;

 

public class ConcreteChatMediator implements ChatMediator{

    @Override

    public void sendMessage(Message message, Member member) {

        // 处理消息的发送逻辑

        member.receiveMessage(message);

    }

}

 

 

 

 

package org.test19;

 

public class ConcreteMember implements Member{

    private String name;

    private ChatMediator chatMediator;

 

    ConcreteMember(String name, ChatMediator chatMediator) {

        this.name = name;

        this.chatMediator = chatMediator;

    }

 

    @Override

    public void sendMessage(Message message) {

        if (message != null) {

            // 在这里进行图片大小和文本长度的判断

            if (message instanceof TextMessage) {

                if (((TextMessage) message).getContent().length() > 100) {

                    System.out.println("Text message too long. Limit is 100 characters. Message not sent.");

                    return;

                }

            } else if (message instanceof ImageMessage) {

                if (((ImageMessage) message).getSizeInMegaBytes() > 20) {

                    System.out.println("Image size too large. Message not sent.");

                    return;

                }

            }

 

            chatMediator.sendMessage(message, this);

        } else {

            System.out.println("Message not sent.");

        }

    }

 

    @Override

    public void receiveMessage(Message message) {

        if (message != null) {

            System.out.println(name + " received: " + message.getContent());

        } else {

            System.out.println(name + " did not receive the message.");

        }

    }

}

 

 

 

 

package org.test19;

 

public class ImageMessage extends Message{

    private int sizeInBytes;

 

    ImageMessage(int sizeInBytes) {

        this.sizeInBytes = sizeInBytes;

    }

 

    int getSizeInMegaBytes() {

        return sizeInBytes / (1024 * 1024);

    }

 

    @Override

    public String getContent() {

        return "Image Size: " + sizeInBytes + " bytes";

    }

}

 

 

 

 

package org.test19;

 

public interface Member {

    void sendMessage(Message message);

    void receiveMessage(Message message);

}

 

 

 

 

 

package org.test19;

 

public abstract class Message {

    public abstract  String getContent();

}

 

 

 

 

 

package org.test19;

 

public class TextMessage extends Message{

 

    private String content;

 

    TextMessage(String content) {

        this.content = content;

    }

 

    @Override

    public String getContent() {

        return content;

    }

}package org.test19;

 

public interface ChatMediator {

    void sendMessage(Message message, Member member);

}

 

 

package org.test19;

 

public class Client {

    public static void main(String[] args) {

        ChatMediator chatMediator = new ConcreteChatMediator();

 

        Member member1 = new ConcreteMember("Alice", chatMediator);

        Member member2 = new ConcreteMember("Bob", chatMediator);

 

        member1.sendMessage(new TextMessage("Hello, how are you?"));

        member2.sendMessage(new ImageMessage(15 * 1024 * 1024));  // This should work

        member1.sendMessage(new TextMessage("I'm good, thanks! How about you?"));

        member2.sendMessage(new ImageMessage(25 * 1024 * 1024));

 

    }

}

 

 

 

 

package org.test19;

 

public class ConcreteChatMediator implements ChatMediator{

    @Override

    public void sendMessage(Message message, Member member) {

        // 处理消息的发送逻辑

        member.receiveMessage(message);

    }

}

 

 

 

 

package org.test19;

 

public class ConcreteMember implements Member{

    private String name;

    private ChatMediator chatMediator;

 

    ConcreteMember(String name, ChatMediator chatMediator) {

        this.name = name;

        this.chatMediator = chatMediator;

    }

 

    @Override

    public void sendMessage(Message message) {

        if (message != null) {

            // 在这里进行图片大小和文本长度的判断

            if (message instanceof TextMessage) {

                if (((TextMessage) message).getContent().length() > 100) {

                    System.out.println("Text message too long. Limit is 100 characters. Message not sent.");

                    return;

                }

            } else if (message instanceof ImageMessage) {

                if (((ImageMessage) message).getSizeInMegaBytes() > 20) {

                    System.out.println("Image size too large. Message not sent.");

                    return;

                }

            }

 

            chatMediator.sendMessage(message, this);

        } else {

            System.out.println("Message not sent.");

        }

    }

 

    @Override

    public void receiveMessage(Message message) {

        if (message != null) {

            System.out.println(name + " received: " + message.getContent());

        } else {

            System.out.println(name + " did not receive the message.");

        }

    }

}

 

 

 

 

package org.test19;

 

public class ImageMessage extends Message{

    private int sizeInBytes;

 

    ImageMessage(int sizeInBytes) {

        this.sizeInBytes = sizeInBytes;

    }

 

    int getSizeInMegaBytes() {

        return sizeInBytes / (1024 * 1024);

    }

 

    @Override

    public String getContent() {

        return "Image Size: " + sizeInBytes + " bytes";

    }

}

 

 

 

 

package org.test19;

 

public interface Member {

    void sendMessage(Message message);

    void receiveMessage(Message message);

}

 

 

 

 

 

package org.test19;

 

public abstract class Message {

    public abstract  String getContent();

}

 

 

 

 

 

package org.test19;

 

public class TextMessage extends Message{

 

    private String content;

 

    TextMessage(String content) {

        this.content = content;

    }

 

    @Override

    public String getContent() {

        return content;

    }

}

3注意编程规范。

 

 

posted @ 2024-12-17 23:48  混沌武士丞  阅读(8)  评论(0)    收藏  举报