随笔 - 217  文章 - 4  评论 - 4  阅读 - 23587

中介者模式——java实现

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

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

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

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

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

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

思路:各新增一个具体中介者类,具体同事类。

复制代码
package mediator;

import java.util.Hashtable;

//具体中介者类,新增具体聊天室
public class ChatRoom extends AbstractChatroom{
    private Hashtable members = new Hashtable();

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

    @Override
    public void sendText(String from, String to, String message) {
        Member member = (Member) members.get(to);
        if(message.length()>100){
            System.out.println("字符长度超过100,发送失败");
        }else {
            member.receiveText(from,message);
        }
    }

    @Override
    public void sendImage(String from, String to, String image) {
        Member member = (Member) members.get(to);
        if(image.length()>200){
            System.out.println("图片超过200M,发送失败");
        }else {
            member.receiveImage(from, image);
        }
    }
}
复制代码

 

复制代码
package mediator;

import java.util.Scanner;

//新增具体会员类,超级会员
public class SuperMember extends Member {
    public SuperMember(String name) {
        super(name);
    }

    @Override
    public void sendText(String to, String message) {
        System.out.println("超级会员发送文本:");
        Scanner sc = new Scanner(System.in);
        System.out.print(name + "请输入时间:");
        String time = sc.next();
        message = message + time;
        chatroom.sendText(name, to, message);
    }

    @Override
    public void sendImage(String to, String image) {
        System.out.println("超级会员发送图片:");
        chatroom.sendImage(name,to,image);
    }
}
复制代码
复制代码
AbstractChatroom chat = new ChatRoom();
        Member member1,member2;

        member1 = new SuperMember("熊大");
        member2 = new SuperMember("熊二");

        chat.register(member1);
        chat.register(member2);

        member1.sendText("熊二","熊二,给你果子");
        member1.sendImage("熊二","果子图片");
//用于测试长度 member1.sendText(
"熊二","111111111111111111111111111111111111111111111111111111111111" + "111111111111111111111111111111111111111111111111111111111111111111111111111111111111" + "111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); member1.sendImage("熊二","111111111111111111111111111111111111111111111111111111111111" + "111111111111111111111111111111111111111111111111111111111111111111111111111111111111" + "111111111111111111111111111111111111111111111111111111111111111111111111111111111111" + "111111111111111111111111111111111111111111111111111111111111111111111111111111111111" + "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111" + "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); member2.sendText("熊大","熊大,给你栗子"); member2.sendImage("熊大","栗子图片");
复制代码

 

posted on   跨越&尘世  阅读(94)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
历史上的今天:
2021-11-03 Java学习--Servlet+jsp+javabean实现课程添加
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示