中介者模式——java实现
问题描述:
在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:
1. 新的具体聊天室中发送的图片大小不得超过20M。
2. 新的具体聊天室中发送的文字长度不得超过100个字符。
3. 新的具体会员类可以发送图片信息和文本信息。
4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。
修改客户端测试类,注意原有系统类代码和客户端代码的修改。
代码:
//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--------------------"); } }
运行截图: