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

中介者模式

时间:2023-12-08 16:23:03浏览次数:26  
标签:String sendtext void 模式 Member 中介 public name

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

  1. 新的具体聊天室中发送的图片大小不得超过20M。
  2. 新的具体聊天室中发送的文字长度不得超过100个字符。
  3. 新的具体会员类可以发送图片信息和文本信息。
  4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。
    修改客户端测试类,注意原有系统类代码和客户端代码的修改。

1. 提交源代码;

2.	//Member.java
package shiyan19;

public abstract class Member {
    protected AbstractChatroom room;
    protected String name;
    public Member(String a){
        name=a;
    }
    public String getname(){
        return name;
    }
    public void setname(String a){
        name=a;
    }
    public AbstractChatroom getroom(){
        return room;
    }
    public void setroom(AbstractChatroom a){
        room=a;
    }
    public abstract void sendtext(String a,String mess);
    public abstract void sendimage(String a,String image);
    public void receivetext(String a,String mess){
        System.out.println(a+"发送的给"+name+"内容是"+mess);
    }
    public void receiveimage(String a,String image){
        System.out.println(a+"发送的给"+name+"内容是"+image);
    }
}
//CommonMember.java
package shiyan19;


public class CommonMember extends Member{
    public CommonMember(String a){
        super(a);
    }
    public void sendtext(String a,String c){
        System.out.println("普通会员发送消息");
        room.sendtext(name,a,c);
    }
    public void sendimage(String a,String c){
        System.out.println("普通会员不能发送图片");
    }
}
//DiamondMember.java
package shiyan19;

public class DiamondMember extends Member{
    public DiamondMember(String a){
        super(a);
    }
    public void sendtext(String a,String c){
        System.out.println("钻石会员发送消息");
        room.sendtext(name,a,c);
    }
    public void sendimage(String a,String c){
        System.out.println("钻石会员发送图片");
        room.sendimage(name,a,c);
    }
}
//NewGroup.java
package shiyan19;

        import java.util.HashMap;
        import java.util.Map;
public class NewGroup extends AbstractChatroom{

    Map<String,Member> table = new HashMap<>();
    public void register(Member member) {
        table.put(member.getname(), member);
        member.setroom(this);
    }

    public void sendtext(String from, String to, String message) {
        if(message.length()>=100){
            System.out.println("超过100个字符,发送失败");
        }else{
            Member member = table.get(to);
            if(member!=null)
                member.receivetext(from, message);
        }
    }

    public void sendimage(String from, String to, String message) {
        if(message.length()>=20){
            System.out.println("图片超过20M,发送失败");
        }else{
            Member member = table.get(to);
            if(member!=null)
                member.receiveimage(from, message);
        }
    }

}
//NewMember.java
package shiyan19;

public class NewMember extends Member{
    public NewMember(String a){
        super(a);
    }
    public void sendtext(String a,String c){
        System.out.println("新会员发送消息:");
        room.sendtext(name,a,c);
    }
    public void sendimage(String a,String c){
        System.out.println("新会员发送图片:");
        room.sendimage(name,a,c);
    }
}
//AbstractChatroom.java
package shiyan19;

public abstract class AbstractChatroom {
    public abstract void register(Member m);
    public abstract void sendtext(String a,String b,String mess);
    public abstract void sendimage(String a,String b,String mess);
}
//ChatGroup.java
package shiyan19;

        import java.util.*;

public class ChatGroup extends AbstractChatroom{
    private Hashtable ms=new Hashtable();
    public void register(Member m)
    {
        if(!ms.contains(m)){
            ms.put(m.getname(),m);
            m.setroom(this);
        }
    }
    public void sendtext(String a,String b,String c){
        Member m=(Member)ms.get(b);
        String newm=c;
        newm=c.replaceAll("日","*");
        m.receivetext(a,newm);
    }
    public void sendimage(String a,String b,String c){
        Member m=(Member)ms.get(b);
        if(c.length()>5){
            System.out.println("图片较大,发送失败");
        }else{
            m.receiveimage(a,c);
        }
    }
}
//main.java
package shiyan19;

public class main {
    public static void main(String args[]){
        AbstractChatroom r1=new NewGroup();
        Member m1,m2,m3;
        m1=new NewMember("张三");
        m2=new NewMember("李四");
        m3=new NewMember("王五");
        r1.register(m1);
        r1.register(m2);
        r1.register(m3);
        m1.sendtext("张三",":好啊呦");
        m2.sendtext("李四",":饭,三克油,安的有");
        m1.sendtext("王五",":耶,米兔");
        m2.sendtext("李四",":哈哈");
        m1.sendtext("王五",":哈哈");
        m3.sendimage("张三",":666");
        m2.sendimage("王五",":666");
    }
}

2. 注意编程规范。

标签:String,sendtext,void,模式,Member,中介,public,name
From: https://www.cnblogs.com/yzx-sir/p/17888381.html

相关文章

  • 小谈设计模式(14)—建造者模式
    (小谈设计模式(14)—建造者模式)专栏介绍专栏地址link专栏介绍主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。建造者模式建造者模式是一种创建型设计模式,它可以将一个复杂......
  • Pipeline模式应用
    本文记录Pipeline设计模式在业务流程编排中的应用前言Pipeline模式意为管道模式,又称为流水线模式。旨在通过预先设定好的一系列阶段来处理输入的数据,每个阶段的输出即是下一阶段的输入。本案例通过定义PipelineProduct(管道产品),PipelineJob(管道任务),PipelineNode(管道节点),完成一整......
  • GOF23--23种设计模式(二)
    一.建造者模式建造者模式也是属于建造型模式,它提供了一种创建对象的最佳方式定义:将一个复杂的对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示主要作用:在用户不知道对象的构建细节的情况下,就可以创建复杂的对象这里需要注意一下,建造者模式都都是用来创建复杂对......
  • 23种设计模式——建造者模式
    今天我们要学习的是23种设计模式中的第四种——建造者模式。建造者模式主要适用于一些基本部件不会变,而其组合经常变化的情况,下面我们开始进入正题。概念:建造者模式(BuilderPattern)又叫生成器模式,是一种对象构建模式。建造者模式是将一个复杂对象的构造与它的表示分离,使同样的......
  • 【Nginx/IIS】解决uniapp/Vue history模式下页面刷新404
    uniapp/Vue开启History模式本地开发:二级页面刷新或者通过链接进入二级页面是正常的打包部署后:二级页面刷新或者通过链接进入二级页面会报错404页面找不到 解决方案:Nginx配置:在nginx.conf的对应location里配置一行代码try_files$uri$uri//index.html;location/h5{......
  • uml设计模式语言
    UML(UnifiedModelingLanguage)是一种广泛应用于软件开发和系统设计的建模语言。在软件工程中,UML图用于可视化、规划和共享系统设计的概念,其中类图是其中最核心、最常用的一种图示。本文将简述UML模型设计的基本概念,重点关注类图及其关系的详细解释。1.UML概述:UML作为一种标准化......
  • Windows 下部署Redis 主从模式+哨兵模式+JAVA连接方式
    原文:Windows下部署Redis主从模式+哨兵模式+JAVA连接方式_javaredis部署-CSDN博客前言之前项目需求部署redis高可用,走了很多弯路以及相关配置来回折腾浪费了很多时间,特地记录下。主从模式:实现多台redis实例进行服务运行,并且数据相互同步;哨兵模式:实现主服务器和从服务器进行监......
  • vim编辑器命令模式——撤销与时间旅行
    原创:厦门微思网络Vi介绍Vi编辑器是所有Unix及Linux系统下标准的编辑器,类似于windows系统下的notepad(记事本)编辑器,由于在Unix及Linux系统的任何版本,Vi编辑器是完全相同的,因此可以在其他任何介绍vi的地方都能进一步了解它,Vi也是Linux中最基本的文本编辑器,学会它后......
  • 简述LVS的工作模式和调度算法
    工作模式:NAT,TUNNEL,DR,FULLNAT算法说明rr轮询调度(Round-Robin),它将请求依次分配不同的RS节点,也就是在RS节点中均摊请求。这种算法简答,但是只适合于RS节点处理性能相差不大的情况wrr加权轮询调度(Weighted Round-Robin)它将依据不同RS节点的权值分配任务。权值较高的RS将优先获得任务,并......
  • 设计模式
    1.设计模式的概念在面向对象领域中的一个重要突破就是提出设计模式的概念。软件的设计模式是人们在长期的开发实践中总结的良好经验,他提供了一个简单、统一的描述方法,使人们可以复用这些软件设计方法、过程管理经验。2.设计模式的描述设计模式的概念是来自于建筑师ChristopherAl......