虚拟聊天室(中介者模式实战)

某论坛系统欲增加一个虚拟聊天室,允许论坛会员通过该聊天室进行信息交流,普通会员(CommonMember)可以给其他会员发送文本信息,钻石会员(DiamondMember)既可以给其他会员发送文本信息,还可以发送图片信息。该聊天室可以对不雅字符进行过滤,如“日”等字符;还可以对发送的图片大小进行控制。用中介者模式设计该虚拟聊天室。
在这里插入图片描述

运行结果截图:

在这里插入图片描述

类图:

在这里插入图片描述

代码:

抽象同事者类

package com.song;
//抽象同事者类
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)
        {
            System.out.println(sender + "发送文本给" + this.name + "\n内容为:" + text);
        }

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

    }


具体同事者类
普通会员类:

package com.song;

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 com.song;

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 com.song;

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);

}

具体中介者类:

package com.song;

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 com.song;

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");
        colleague1.sendText("李四","测试日");

        //测试发送图片大小
        System.out.println("\n-----------------------------测试发送图片大小---------------------------------\n");
        colleague2.sendImage("张三","测试发送图片大小测试发送图片大小测试发送图片大小测试发送图片大小");
    }
}

新人报道,求关注,求关注,求关注!!!
可以直接问我要代码

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值