设计模式实验19:中介者模式
实验19:中介者模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解中介者模式的动机,掌握该模式的结构;
2、能够利用中介者模式解决实际问题。
[实验任务一]:虚拟聊天室
在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:
1. 新的具体聊天室中发送的图片大小不得超过20M。
2. 新的具体聊天室中发送的文字长度不得超过100个字符。
3. 新的具体会员类可以发送图片信息和文本信息。
4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。
修改客户端测试类,注意原有系统类代码和客户端代码的修改。
实验要求:
1. 提交源代码;
package test19; import java.time.LocalDateTime; public abstract class Member { protected Abcharroom room; protected String name; public Member(String a){ name=a; } public String getname(){ return name; } public void setname(String a){ name=a; } public Abcharroom getroom(){ return room; } public void setroom(Abcharroom 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+ LocalDateTime.now()); } public void receiveimage(String a,String image){ System.out.println(a+"发送的给"+name+"内容是"+image+ LocalDateTime.now()); } } Abcharroom package test19; public abstract class Abcharroom { 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); } package test19; public class Pu extends Member{ public Pu(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("普通会员不能发送图片"); } } package test19; public class Xin extends Member{ public Xin(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); } } package test19; import java.util.HashMap; import java.util.Map; public class Room extends Abcharroom{ 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.err.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.err.println("图片超过20M,发送失败"); }else{ Member member = table.get(to); if(member!=null) member.receiveimage(from, message); } } } package test19; public class Main { public static void main(String args[]){ Abcharroom r1=new Room(); Member m1,m2,m3; m1=new Xin("A"); m2=new Xin("B"); m3=new Xin("C"); r1.register(m1); r1.register(m2); r1.register(m3); m1.sendtext("B",":干什莫么呢"); m2.sendtext("A",":鸡你太美"); m2.sendtext("A",":怎末回事啊---------------------------------------------------------------------------------------------------------------------------------------------------------------------------"); m1.sendtext("B","呵呵"); m3.sendimage("A",":坏笑.jpg-----------------------------------------"); m3.sendimage("B",":坏笑.jpg"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通