首页 > 其他分享 >中介者模式

中介者模式

时间:2022-11-08 15:02:17浏览次数:40  
标签:name void 模式 Member 中介 chatroom public String

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

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

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

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

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

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

 

 

 

 

 

package org.Mediator;


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

 

package org.Mediator;

import java.util.HashMap;
import java.util.Hashtable;

public class ChatGroup 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("文字过长,发送失败!");
        }else{
            member.receiveText(from,message);
        }
    }

    @Override
    public void sendImage(String from, String to, String image) {
        Member member= (Member) members.get(to);
        if(image.length()>20){
            System.out.println("图片过大,发送失败!");
        }else{
            member.receiveImage(from,image);
        }
    }
}

 

package org.Mediator;

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

    public String getName() {
        return name;
    }

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

    public Member(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);
    }
}

 

package org.Mediator;

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

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

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

 

package org.Mediator;

public class Client {
    public static void main(String[] args) {
        AbstractChatroom chatroom=new ChatGroup();

        Member member1,member2,member3,member4,member5;
        member1=new DiamondMember("笑意");
        member2=new DiamondMember("晓贰");
        member3=new DiamondMember("消散");
        member4=new DiamondMember("小肆");
        member5=new DiamondMember("小伍");

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

        member1.sendText("晓贰","晓贰,你好");
        member2.sendText("笑意","笑意,你好");
        member3.sendImage("小肆","好大的太阳");
        member4.sendImage("消散","**********************************************************");
        member5.sendText("消散","*********************************************************" +
                "************************************************************************************" +
                "************************************************************************************" +
                "************************************************************************************");
    }
}

 

标签:name,void,模式,Member,中介,chatroom,public,String
From: https://www.cnblogs.com/zhiqi2625/p/16869719.html

相关文章

  • 工厂方法模式
    目前常用的加密算法有DES(DataEncryptionStandard)和IDEA(InternationalDataEncryptionAlgorithm)国际数据加密算法等,请用工厂方法实现加密算法系统。类图   源码......
  • 抽象工厂模式
    使用抽象工厂模式,完成下述产品等级结构:   类图   代码结构  java  packagerjsj.no4;publicclassBlackSkinWomenimplementsWomen{......
  • Go | 浅谈包管理模式
    任何一门编程语言都离不开对各种工具包的使用,工具包的管理就显得异常重要了。Go的包管理方式是逐渐演进的,本文介绍Go语言的两种包管理模式。GOPATH模式引包(不推荐)在1......
  • React组件设计模式-纯组件,函数组件,高阶组件
    一、组件(1)函数组件如果你想写的组件只包含一个render方法,并且不包含state,那么使用函数组件就会更简单。我们不需要定义一个继承于React.Component的类,我们可以定......
  • React的5种高级模式
    本文概述了5种现代高级React模式,包括集成代码、优点和缺点,以及在公共库中的具体用法。像每个React开发者一样,你可能已经问过自己以下问题之一我如何建立一个可重复使用......
  • 设计模式—建造者模式
    我们通常在开发中见到一种链式的构造对象,比如:demoAnimatordemoAnimator=newdemoAnimator.Builder().setFade(true).setDuration(1000).build();那他是怎样实现的呢、......
  • 使用Postman去验证Oauth2.0授权码模式出现"Error: Bad client credentials"的解决方法
    错误时的authentication的配置如下  检查过console后,发现拿授权码去获取token时没有带上CilentSecret  经过一番奋斗发现是ClientAuthentication这里的问题......
  • Vue面试题45:history模式和hash模式有何区别?(总结自B站up主‘前端杨村长’视频,仅供自用
    分析vue-router有3个模式,其中两个更为常用,那便是history和hash;两者差别主要在显示形式和部署上;体验vue-router4.x中设置模式的方式已经改变constrouter=cr......
  • 初识设计模式 - 职责链模式
    简介职责链设计模式(ChainOfResponsibilityDesignPattern)的定义是,将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。同时,将这些接收对象串成一条链,并沿着......
  • 设计模式学习(四):建造者模式
    设计模式学习(四):建造者模式作者:Grey原文地址:博客园:设计模式学习(四):建造者模式CSDN:设计模式学习(四):建造者模式建造者模式建造者模式是创建型模式。我们在对一个实体类进......