中介者模式——java实现
问题描述:
在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:
1. 新的具体聊天室中发送的图片大小不得超过20M。
2. 新的具体聊天室中发送的文字长度不得超过100个字符。
3. 新的具体会员类可以发送图片信息和文本信息。
4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。
修改客户端测试类,注意原有系统类代码和客户端代码的修改。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | //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( "小李" , ":哈哈.jpg" ); m2.sendimage( "张三" , ":哈哈.jpg--------------------" ); } } |
运行截图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律