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




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

package design.mediator2;

/**
 * @author 作者 E-mail: [email protected]
 * @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: [email protected]
 * @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: [email protected]
 * @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: [email protected]
 * @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: [email protected]
 * @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: [email protected]
 * @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);
	}

}

猜你喜欢

转载自jqsl2012.iteye.com/blog/1393690