中介者模式——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 2022-11-03 17:19  跨越&尘世  阅读(99)  评论(0)    收藏  举报