论坛首页 Java企业应用论坛

女友的对话(中介者模式也叫调停者)

浏览 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 得到消息:看见我老公了没啊,长的很帅的那种!
LivelyGirl 得到消息:靠!不要脸的越来越多了!

 

 

 

 

   发表时间: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");  
这两行都是自己跟自己说话,应该把名字对换一下
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics