设计模式之Mediator中介者模式2012年3月28日

[b]中介者模式的定义[/b]
用一个中介对象来封装一系列的对象交互。中介者使得各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
Mediator:中介者接口。在里面定义各个同事之间交互需要的方法,可以是公共的通信方法,比如changed方法,大家都用,也可以是小范围的交互方法。
ConcreteMediator:具体中介者实现对象。他需要了解并维护各个同事对象,并负责具体的协调各同事对象的交互关系。
Colleague:同事类的定义,通常实现成为抽象类,主要负责约束同事对象的类型,并实现一些具体同事类之间的公共功能,比如:每个具体同事类都应该知道中介者对象,也就是具体同事类都会持有中介者对象,都可以定义到这个类里面。
ConcreteColleague:具体的同事类,实现自己的业务,在需要与其他同事通信的时候,就与持有的中介者通信,中介者会负责与其他的同事交互。

[img]http://dl.iteye.com/upload/attachment/0065/6359/54e9fe42-59e2-3f39-99a8-8f5eeee724fd.png[/img]

public abstract class Colleague {
public Mediator mediator ;
public Colleague(Mediator mediator){
this.mediator = mediator;
}
public Mediator getMediator(){
return this.mediator;
}
}

public class ColleagueMediator implements Mediator {
private ConcreteColleagueA colleagueA;
private ConcreteColleagueB colleagueB;

public void setColleagueA(ConcreteColleagueA colleagueA) {
this.colleagueA = colleagueA;
}

public void setColleagueB(ConcreteColleagueB colleagueB) {
this.colleagueB = colleagueB;
}

@Override
public void changed(Colleague colleague) {
// TODO Auto-generated method stub
}
}

public class ConcreteColleagueA extends Colleague {
public ConcreteColleagueA(Mediator mediator) {
super(mediator);
}
public void someOperation(){
mediator.changed(this);
}
}

public class ConcreteColleagueB extends Colleague{

public ConcreteColleagueB(Mediator mediator) {
super(mediator);
}
public void someOperation(){
mediator.changed(this);
}
}

/**
* 中介者,定义各个同事对象通信的接口
* @author wangxiong
*
*/
public interface Mediator {
/**
* 同事对象在自身改变的时候来通知中介者的方法
* 让中介者去负责相应的与其他同事对象的交互
* @param colleague同事对象自身,好让中介者对象通过对象实例去获取同事对象的状态
*/
public void changed(Colleague colleague);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值