《软件设计》中介者模式

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

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

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

 


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

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

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

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

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

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

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

实验要求:

1.      画出对应的类图;

2.      提交源代码;

3. 注意编程规范。

 

1.      类图

 

2.      源代码

Member.java

package org.example;

public abstract class Member
{
    protected AbstractChatroom chatroom;
    protected String name;

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

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name=name;
    }

    public AbstractChatroom getChatroom()
    {
        return chatroom;
    }

    public void setChatroom(AbstractChatroom chatroom)
    {
        this.chatroom=chatroom;
    }

    public abstract void sendText(String to,String message);
    public abstract void sendImage(String to,String image);

    public void receiveText(String from,String message)
    {
        System.out.println(from + "发送文本给" + this.name + ",内容为:" + message);
    }

    public void receiveImage(String from,String image)
    {
        System.out.println(from + "发送图片给" + this.name + ",内容为:" + image);
    }
}

AbstractChatroom.java

package org.example;


public abstract class AbstractChatroom
{
    public abstract void register(Member member);
    public abstract void sendText(String from,String to,String message);
    public abstract void sendImage(String from,String to,String message);
}

ChatGroup.java

package org.example;

import java.util.*;

public class ChatGroup extends AbstractChatroom
{
    private Hashtable members=new Hashtable();

    public void register(Member member)
    {
        if(!members.contains(member))
        {
            members.put(member.getName(),member);
            member.setChatroom(this);
        }
    }

    public void sendText(String from,String to,String message)
    {
        Member member=(Member)members.get(to);
        String newMessage=message;
        newMessage=message.replaceAll("日","*");
        member.receiveText(from,newMessage);
    }

    public void sendImage(String from,String to,String image)
    {
        Member member=(Member)members.get(to);
        //模拟图片大小判断
        if(image.length()>5)
        {
            System.out.println("图片太大,发送失败!");
        }
        else
        {
            member.receiveImage(from,image);
        }
    }
}

CommonMember.java

package org.example;



public class CommonMember extends Member
{
    public CommonMember(String name)
    {
        super(name);
    }

    public void sendText(String to,String message)
    {
        System.out.println("普通会员发送信息:");
        chatroom.sendText(name,to,message);  //发送
    }

    public void sendImage(String to,String image)
    {
        System.out.println("普通会员不能发送图片!");
    }
}

DiamondMember.java

package org.example;

public class DiamondMember extends Member
{
    public DiamondMember(String name)
    {
        super(name);
    }

    public void sendText(String to,String message)
    {
        System.out.println("钻石会员发送信息:");
        chatroom.sendText(name,to,message);  //发送
    }

    public void sendImage(String to,String image)
    {
        System.out.println("钻石会员发送图片:");
        chatroom.sendImage(name,to,image);  //发送
    }
}

Client.java

package org.example;

public class Client
{
    public static void main(String args[])
    {
        AbstractChatroom happyChat=new ChatGroup();
        Member member1,member2,member3,member4,member5;
        member1=new DiamondMember("张三");
        member2=new DiamondMember("李四");
        member3=new CommonMember("王五");
        member4=new CommonMember("小芳");
        member5=new CommonMember("小红");

        happyChat.register(member1);
        happyChat.register(member2);
        happyChat.register(member3);
        happyChat.register(member4);
        happyChat.register(member5);

        member1.sendText("李四","李四,你好!");
        member2.sendText("张三","张三,你好!");
        member1.sendText("李四","今天天气不错,有日!");
        member2.sendImage("张三","一个很大很大的太阳");
        member2.sendImage("张三","太阳");
        member3.sendText("小芳","还有问题吗?");
        member3.sendText("小红","还有问题吗?");
        member4.sendText("王五","没有了,谢谢!");
        member5.sendText("王五","我也没有了!");
        member5.sendImage("王五","谢谢");
    }
}

 

posted @   new菜鸟  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示