简单_调停者模式(mediator)/中介者模式

[img]http://dl.iteye.com/upload/attachment/0062/7446/215fc6b9-ed40-3ba9-a9d4-a969bf1b7efe.jpg[/img]


调停者模式(mediator)/中介者模式:
以唐僧作为调停者,孙悟空、八戒、沙僧他们互相进行问候.为例子。
假设他们3个互相打招呼不用这个设计模式而是直接打招呼,那么以后有改动的话将会很无奈,用了该模式后会发现以后即便需要改动了也不需要改动什么,顶多就是改动下调停者的逻辑实现。

package design.mediator2;

/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-2-4 下午05:21:45 <br>
*
*/
public class Test {
public static void main(String[] args) {
/*
* 调停者模式(mediator)/中介者模式
* 唐僧作为调停者,孙悟空、八戒、沙僧他们互相进行问候.
* 如果不用调停者模式将会非常的混乱。
* 调停者模式实质上是调停者类拥有被调停者类的引用,
* TangShengMediator唐僧作为调停者必须要拥有 孙悟空、八戒、沙僧 他们的引用,
* 要不怎么进行调停呢。
*/
//创建调停者
TangShengMediator m = new TangShengMediator();
//创建被调停者
SunWuKong swk = new SunWuKong(m);
BaJie bj = new BaJie(m);
ShaSheng ss = new ShaSheng(m);

//互相进行问候
swk.sayHello(bj);
swk.sayHello(ss);
ss.sayHello(swk);
ss.sayHello(bj);
bj.sayHello(swk);
bj.sayHello(ss);
}
}

package design.mediator2;

/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-2-4 下午05:22:47 <br>
* 唐僧作为调停者
*/
public class TangShengMediator {
private SunWuKong swk;
private BaJie bj;
private ShaSheng ss;

public SunWuKong getSwk() {
return swk;
}

public void setSwk(SunWuKong swk) {
this.swk = swk;
}

public BaJie getBj() {
return bj;
}

public void setBj(BaJie bj) {
this.bj = bj;
}

public ShaSheng getSs() {
return ss;
}

public void setSs(ShaSheng ss) {
this.ss = ss;
}

public void sayHello(Person p) {
if (p instanceof SunWuKong) {
System.out.println("孙悟空在。。。");
} else if (p instanceof BaJie) {
System.out.println("八戒在。。");
} else if (p instanceof ShaSheng) {
System.out.println("沙僧在。。");
}
}
}

package design.mediator2;

/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-2-4 下午05:22:07 <br>
* 被调停的抽象类
*/
public abstract class Person {
//持有调停者的引用
protected TangShengMediator m;

public Person(TangShengMediator m) {
this.m = m;
}

//孙悟空、八戒、沙僧 相互间进行打招呼,这里其子类需要实现该方法,这看起来又有模板方法模式的影子
public abstract void sayHello(Person p);
}

package design.mediator2;

/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-2-4 下午05:24:03 <br>
* 被调停者---孙悟空
*/
public class SunWuKong extends Person {

public SunWuKong(TangShengMediator m) {
super(m);
}

@Override
public void sayHello(Person p) {
m.setSwk(this);
m.sayHello(p);
}

}

package design.mediator2;

/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-2-4 下午05:25:10 <br>
* 被调停者---八戒
*/
public class BaJie extends Person {

public BaJie(TangShengMediator m) {
super(m);
}

@Override
public void sayHello(Person p) {
m.setBj(this);
m.sayHello(p);
}

}

package design.mediator2;

/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-2-4 下午05:25:34 <br>
* 被调停者---沙僧
*/
public class ShaSheng extends Person {

public ShaSheng(TangShengMediator m) {
super(m);
}

@Override
public void sayHello(Person p) {
m.setSs(this);
m.sayHello(p);
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值