2024/11/23

实验19:中介者模式

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

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

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

 
   

 


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

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

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

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

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

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

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

实验要求:

1.     画出对应的类图;

 

2.     提交源代码;

package ruanjiansheji.shiyan19;

 

public class Client {

    public static void main(String[] args) {

        Mediator chatRoom=new ConcreteMediator();

        Colleague colleague1,colleague2;

 

        colleague1=new CommonMember("张三");

        colleague2=new DiamondMember("李四");

 

        chatRoom.register(colleague1);

        chatRoom.register(colleague2);

 

//测试普通会员的发送权限

        System.out.println("-----------------------------测试普通会员的发送权限---------------------------\n");

        colleague1.sendText("李四","我是普通会员,向你发送文本!");

        colleague1.sendImage("李四","我是普通会员,向你发送图片!");

 

 

//测试钻石会员发送权限

        System.out.println("\n------------------------------测试钻石会员发送权限-----------------------------\n");

        colleague2.sendText("张三","我是钻石会员,向你发送文本");

        colleague2.sendImage("张三","我是钻石会员,向你发送图片!");

 

//测试发送图片大小

        System.out.println("\n-----------------------------测试发送图片大小---------------------------------\n");

        colleague2.sendImage("张三","测试发送图片大小测试发送图片大小测试发送图片大小测试发送图片大小");

    }

}

package ruanjiansheji.shiyan19;

 

import java.text.SimpleDateFormat;

import java.util.Date;

 

//抽象同事者类

public abstract class Colleague

{

    //定义一个中介者

    protected Mediator mediator;

    //定义会员的名字

    protected String name;

    //构造函数

    public Colleague(){}

    public Colleague(String name) {

        this.name = name;

    }

 

    public String getName() {

        return name;

    }

 

    public Mediator getMediator() {

        return mediator;

    }

 

    public void setMediator(Mediator mediator) {

        this.mediator = mediator;

    }

 

    public void setName(String name) {

        this.name = name;

    }

    //不同的会员发送权限不同

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

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

    //但都有接受权限

    public void receiveText(String sender,String text)

    {

        SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");

        Date date = new Date(System.currentTimeMillis());

        System.out.println(sender + "发送文本给" + this.name + "\n内容为:" + text +";"+formatter.format(date));

    }

 

    public void receiveImage(String sender,String image)

    {

        System.out.println(sender+ "发送图片给" + this.name + "\n内容为:" + image);

    }

 

}

package ruanjiansheji.shiyan19;

 

 

public class CommonMember extends Colleague {

    public CommonMember(String name) {

        super(name);

    }

 

    @Override

    public void sendText(String receiver, String text) {

        mediator.sendText(name,receiver,text);

    }

 

    @Override

    public void sendImage(String receiver, String image) {

        System.out.println("普通会员不能发送图片!");

    }

}

package ruanjiansheji.shiyan19;

 

public class ConcreteMediator extends Mediator {

    @Override

    public void sendText(String sender, String receiver, String text) {

//通过传入的接收者的名字,获取接收者对象

        Colleague receiver1= (Colleague) colleagues.get(receiver);

//对不雅字符进行过滤,如将“日”字符,用“*”代替

        String text1=text.replaceAll("日","*");

        receiver1.receiveText(sender,text1);

    }

 

    @Override

    public void sendImage(String sender, String receiver, String image) {

        Colleague receiver1= (Colleague) colleagues.get(receiver);

//对发送图片大小进行控制

        if(image.length()>15){

            System.out.println("图片太大,发送失败");

        }

        else{

            receiver1.receiveImage(sender,image);

        }

    }

}

package ruanjiansheji.shiyan19;

 

public class DiamondMember extends Colleague {

    public DiamondMember(String name) {

        super(name);

    }

 

    @Override

    public void sendText(String receiver, String text) {

        mediator.sendText(name,receiver,text);

    }

 

    @Override

    public void sendImage(String receiver, String image) {

        mediator.sendImage(name,receiver,image);

    }

}

package ruanjiansheji.shiyan19;

 

 

import java.util.HashMap;

import java.util.Map;

 

//抽象中介者类

public abstract class Mediator {

    //定义会员集合

    protected Map<String,Object> colleagues=new HashMap<String,Object>();

    //注册会员

    public void register(Colleague colleague)

    {

        colleagues.put(colleague.getName(),colleague);

        colleague.setMediator(this);

    }

    public abstract void sendText(String sender,String receiver,String text);

    public abstract void sendImage(String sender,String receiver,String image);

 

}

3. 注意编程规范。

 

 

posted @   新晋软工小白  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示