首页 > 其他分享 >实验19:中介者模式

实验19:中介者模式

时间:2024-11-20 09:06:48浏览次数:1  
标签:String sendtext 19 void 中介 Member 实验 public name

[实验任务一]:虚拟聊天室

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

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

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

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

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

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

 

1.类图

2.源代码

//Member.java
package test19;

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


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

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

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

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

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

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

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("周二",":周二你好,难道有人一天不满课?");
        m3.sendtext("周一",":谁说这满课坏呀,这满课太棒啦!");
        m1.sendtext("周二",":---------------------------------------------------------------------------------------------------------------------------------------------------------------------------");
        m3.sendimage("周一",":doge.jpg");
        m3.sendimage("周二",":哈哈.jpg--------------------");
    }
}

 

运行截图:

 

标签:String,sendtext,19,void,中介,Member,实验,public,name
From: https://www.cnblogs.com/po3a/p/18556065

相关文章

  • 实验 20:备忘录模式
    [实验任务一]:多次撤销改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合数据结构实现)。实验要求:1. 画出对应的类图;2. 提交源代码;3. 注意编程规范。1. 类图 2.源代码 importjava.util.ArrayList;importjava.util......
  • 实验 21:观察者模式
    [实验任务一]:股票提醒当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。实验要求:1. 画出对应类图;2. 提交源代码;3. 注意编程规范。1.类图 2.源代码importjava.util.ArrayList;//观察目标类publicc......
  • LCR 021. 删除链表的倒数第 N 个结点(中等)(主站19)
    https://leetcode.cn/problems/SLwz0R/https://leetcode.cn/problems/remove-nth-node-from-end-of-list/难度:☆☆☆题目:给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例:输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]输入:head=[1],n=1输出......
  • 昊星新品发布会以三大主张、四大新品开创实验室安全新纪元
    【2024年11月19日,上海】    珠海昊星自动化系统有限公司(以下简称“昊星”)在2024年慕尼黑上海分析生化展上成功举办新品发布会。本次发布会深入展示了昊星在“匠心、创新、智慧化”方面的融合实践,彰显了昊星在实验室气流控制领域的技术实力和产品优势。多位行业专家出席......
  • 11.19
    C++代码实现:cppincludeincludeinclude<unordered_map>usingnamespacestd;intmain(){intV,E;cin>>V>>E;//错误处理:顶点个数为0if(V==0){cout<<"error"<<endl;return0;}//错误处理:顶点个数为1,且边个数大于0if......
  • 活着就好20241119
    今天是19号,周二,亲爱的朋友们,大家早上好!在告别了昨天并迎来这个全新而又充满希望的周二早晨,让我们带着周一的余韵,怀揣着新的目标和梦想,继续前行在这美好而又充实的一天里吧!......
  • 20222318 2024-2025-1 《网络与系统攻防技术》实验六实验报告
    1.实验内容1.1实验要求掌握Metasploit的使用方法:“Search——Use——Show——Set——Exploit/run”。1.2实验任务(1)前期渗透(2)Vsftpd源码包后门漏洞(21端口)(3)SambaMS-RPCShell命令注入漏洞(端口139)(4)JavaRMISERVER命令执行漏洞(1099端口)(5)PHPCGI参数执行注入漏洞(80端口)1.3......
  • 2024/11/19语法整理
    look的用法1.Look可以表示“看”呀,就像你说“Lookatthatbird!”(看那只鸟!),这是很基础的用法呢。2.“Havealook”也是常用的搭配呀,比如“Let'shavealookatthisbook."(让我们看看这本书。),是不是很简单易懂呀!3.Look还能和“like”一起用呢,“Itlookslikerain......
  • 11.19随笔
    这里是11.19随笔。题目留档:使用键盘输入数学表达式(含数字,四种运算符+、-、、/和小括号,其中运算数都是一位数(0~9)),将数学表达式转化成后缀表达式输出,利用后缀表达式求表达式的值并输出。输入格式:输入正确的表达式(可以有空格)后回车,得到后缀表达式和结果。输入括号缺失的表达式,输......
  • 11.19
    refuse用法搭配基本含义和用法‌:refuse的基本意思是“拒绝”,表示由于不情愿或不愿意而对某项要求或事物给予否定的回答或不接受某物或不肯做某事。refuse既可用作及物动词,也可用作不及物动词。用作及物动词时,可接名词、代词或动词不定式作宾语,有时也可接双宾语,其间接宾语可以转化......