职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1753|回复: 2

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

[复制链接]
有烟没火 发表于 2011-9-4 10: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;   
    }   
      
      
  
}  

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);   
    }   
  
}  

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;


//中介者
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("靠!不要脸的越来越多了!");  
        */  
           
    }   
}  

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 得到消息:靠!不要脸的越来越多了!





楠楠 发表于 2011-9-4 10:02 | 显示全部楼层
更正楼主代码的错误:
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");   
这两行都是自己跟自己说话,应该把名字对换一下

jinchang 发表于 2011-9-4 10:03 | 显示全部楼层
不错,不错
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-1 02:56 , Processed in 0.143517 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表