浏览 4607 次
锁定老帖子 主题:女友的对话(中介者模式也叫调停者)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (4) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-02
需要中介者对象作为通信控制平台 所操控的抽象对象
package mediator; public abstract class DreamGirl { //通知者的一个引用 protected Mediator mediator; protected String name; //中介者调用的方法,用来将别人发的消息通知给自己 public abstract void notifyMessage(String message); //通过对方姓名发送信息 public void Send(String message,String to_name) { //委托给中介者,并将自己作为参数传给中介者 this.mediator.send(message, this, to_name); } public Mediator getMediator() { return mediator; } public void setMediator(Mediator mediator) { this.mediator = mediator; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
具体对象的实现
public class BeautifulGirl extends DreamGirl { public void notifyMessage(String message) { System.out.println("BeautifulGirl 得到消息:"+ message); } } public class LivelyGirl extends DreamGirl { public void notifyMessage(String message) { System.out.println("LivelyGirl 得到消息:"+ message); } }
中介者对象接口 package mediator; //中介者 public interface Mediator { public abstract void send(String message,DreamGirl girl,String to_name); }
通信控制所需的具体中介者实现
package mediator; import java.util.*; import java.util.Map.Entry; /** * 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用, * 从而使其耦合松散,而且可以独立的改变它们之间的交互。 * * @author Administrator * */ public class Boy implements Mediator { /*private BeautifulGirl beautifulGirl; private LivelyGirl livelyGirl;*/ private Map<String,DreamGirl> maps =null; Boy(){ maps= new HashMap<String,DreamGirl>(); } public void put(String name,DreamGirl dg){ maps.put(name, dg); } public void put( DreamGirl dg){ maps.put(dg.getName(), dg); } @SuppressWarnings("unchecked") public void send(String message, DreamGirl girl,String to_name) { //这边根据发送姓名再通过循环girl寻找指定的对象,再通过对象的notifyMessage方法通知信息 Iterator iter = maps.entrySet().iterator(); while( iter.hasNext() ){ Map.Entry<String, DreamGirl> entrys= (Entry<String, DreamGirl>) iter.next(); if(entrys.getKey().endsWith(girl.getName())){ DreamGirl res = entrys.getValue(); res.notifyMessage(message); } } /*if(girl.equals(beautifulGirl)){ livelyGirl.notifyMessage(message); }else if(girl.equals(livelyGirl)){ beautifulGirl.notifyMessage(message); } */ } /* public BeautifulGirl getBeautifulGirl() { return beautifulGirl; } public void setBeautifulGirl(BeautifulGirl beautifulGirl) { this.beautifulGirl = beautifulGirl; } public LivelyGirl getLivelyGirl() { return livelyGirl; } public void setLivelyGirl(LivelyGirl livelyGirl) { this.livelyGirl = livelyGirl; } */ public static void main(String[]args){ Boy ysen =new Boy(); BeautifulGirl bg = new BeautifulGirl(); LivelyGirl lg= new LivelyGirl(); bg.setName("wang_fei"); lg.setName("zhou_xun"); //让中介者认识这些girl ysen.put(bg); ysen.put(lg); //让girl 认识这个中介者 bg.setMediator(ysen); lg.setMediator(ysen); bg.Send("看见我老公了没啊,长的很帅的那种!","wang_fei" ); lg.Send("靠!不要脸的越来越多了!","zhou_xun"); /* Boy ysen =new Boy(); BeautifulGirl bg = new BeautifulGirl(); LivelyGirl lg= new LivelyGirl(); //让girl 认识这个中介者 bg.setMediator(ysen); lg.setMediator(ysen); //让中介者认识这些girl ysen.setBeautifulGirl(bg); ysen.setLivelyGirl(lg); bg.Send("看见我老公了没啊,长的很帅的那种!"); lg.Send("靠!不要脸的越来越多了!"); */ } }
BeautifulGirl 得到消息:看见我老公了没啊,长的很帅的那种!
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-05
更正楼主代码的错误:
Boy类的 public void send(String message, DreamGirl girl,String to_name) { 40. //这边根据发送姓名再通过循环girl寻找指定的对象,再通过对象的notifyMessage方法通知信息 41. Iterator iter = maps.entrySet().iterator(); 42. 43. while( iter.hasNext() ){ 44. 45. Map.Entry<String, DreamGirl> entrys= (Entry<String, DreamGirl>) iter.next(); 46. 47. if(entrys.getKey().endsWith(to_name)){ 48. 49. DreamGirl res = entrys.getValue(); 50. res.notifyMessage(message); 51. } 52. 53. } 另外还有一个逻辑错误: 102. bg.Send("看见我老公了没啊,长的很帅的那种!","wang_fei" ); 103. lg.Send("靠!不要脸的越来越多了!","zhou_xun"); 这两行都是自己跟自己说话,应该把名字对换一下 |
|
返回顶楼 | |