中介者模式(一)
在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:
1. 新的具体聊天室中发送的图片大小不得超过20M。
2. 新的具体聊天室中发送的文字长度不得超过100个字符。
3. 新的具体会员类可以发送图片信息和文本信息。
4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。
修改客户端测试类,注意原有系统类代码和客户端代码的修改。
//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 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 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("adam"); m2=new NewMember("Lil ghost"); m3=new NewMember("justin"); r1.register(m1); r1.register(m2); r1.register(m3); m1.sendtext("Lil ghost",":Hey,bro"); m2.sendtext("adam",":yoyoyo"); m1.sendtext("adam",":---------------------------------------------------------------------------------------------------------------------------------------------------------------------------"); m3.sendimage("adam",":happy.jpg"); m2.sendimage("Justin",":开心.jpg--------------------"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署