注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

东东的博客

江南烟雨,同大家一起分享

 
 
 

日志

 
 

设计模式读书笔记之中介者模式(mediator pattern)  

2010-07-13 20:09:36|  分类: 设计模式相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

中介者模式:用一个中介对象来分装一系列对象的交互。中介者模式使得各个对象之间不需要直接打交道,从而使他们松散耦合。可以独立的改变他们之间的交互。

中介者模式

如果你第一次接触中介者模式,你一定从上图看不出他的作用来。下图更能说明问题, 中介者模式就是要把左边的结构变成右边的结构:

现实中一个更恰当的例子就是联合国,如果没有联合国,则各国之间的关系如下图的左边,在有联合国之后,国与国之间的争执可通过联合国来处理。

基础代码:


view plaincopy to clipboardprint?
//  
package designpattern.mediator;  
  
public interface Mediator {  
    public void send(String msg, Colleague c);  
}  
//  
package designpattern.mediator;  
  
abstract public class Colleague {  
    protected Mediator mediator;  
    public Colleague(Mediator m){  
        this.mediator = m;  
    }  
    public abstract void send(String msg);  
    public abstract void readMsg(String msg);  
}  
//  
package designpattern.mediator;  
  
public class ConcreteMediator implements Mediator {  
    private ConcreteColleague1 colleague1;  
    private ConcreteColleague2 colleague2;  
      
    public void setColleague1(ConcreteColleague1 colleague1) {  
        this.colleague1 = colleague1;  
    }  
  
    public void setColleague2(ConcreteColleague2 colleague2) {  
        this.colleague2 = colleague2;  
    }  
      
    public void send(String msg, Colleague c) {  
        if(c==colleague1){  
            colleague2.readMsg(msg);  
        }  
        else{  
            colleague1.readMsg(msg);  
        }  
    }  
}  
//  
package designpattern.mediator;  
  
public class ConcreteColleague1 extends Colleague{  
    public ConcreteColleague1(Mediator m) {  
        super(m);  
    }  
    public void send(String msg){  
        System.out.println("Colleague1 sends msg: " + msg);  
        mediator.send(msg, this);  
    }  
    public void readMsg(String msg){  
        System.out.println("Colleague1 get msg: " + msg);  
    }  
}  
//  
package designpattern.mediator;  
  
public class ConcreteColleague2 extends Colleague{  
    public ConcreteColleague2(Mediator m) {  
        super(m);  
    }  
    public void send(String msg){  
        System.out.println("Colleague2 sends msg: " + msg);  
        mediator.send(msg, this);  
    }  
    public void readMsg(String msg){  
        System.out.println("Colleague2 gets msg: " + msg);  
    }  
}  
//测试用例  
package designpattern.mediator;  
  
public class Test {  
  
    public static void main(String[] args) {  
        ConcreteMediator mediator = new ConcreteMediator();  
        ConcreteColleague1 c1 = new ConcreteColleague1(mediator);  
        ConcreteColleague2 c2 = new ConcreteColleague2(mediator);  
        mediator.setColleague1(c1);  
        mediator.setColleague2(c2);  
        c1.send("吃了吗?");  
        c2.send("没有, 你要请客吗?");  
    }  
  
}  

优点:把中介者作为一个独立的概念,可使对象之间的关系转为对象和中介者之间的关系, 可站在一个宏观的角度看问题。

缺点:中介者集中控制关系,使得中介者变得复杂。


转自:http://blog.csdn.net/sunxing007/archive/2010/04/05/5453055.aspx

  评论这张
 
阅读(646)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017