十八、中介者模式

中介者模式
 中介者模式,用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦
合松散,而且可以独立的改变它们之间的交互。
 该模式实现了控制集中化,把交互复杂性变为了中介者的复杂性,这就使得中介者会比任何一个关联对象都复
杂。
 ————摘自《大话设计模式》

 基本结构:
 ①、抽象中介者,Mediator
 群组各成员的业务处理方法 method(SuperObject ob,Object args...)

 ②、超类 SuperObject
 抽象中介的引用

 ③、群组
 子类1,继承超类 Object1
 子类2,继承超类 Object2
 ……

 ④、具体中介 ConcreteMeaiator,继承抽象中介者
 群组成员的引用:子类1的引用,子类2的引用……
 覆写超类的 method(SuperObject ob,Object args...),
      判断ob的具体“身份”(Object1?Object2?),调用其相应的方法

    示例代码:  以同事间的相互通信为例
 ①、抽象中介者#########################################

/**
 *	抽象中介 
 */
public abstract class Mediator {
	public abstract void send(String message,Colleague colleague);
}


 ②、超类#########################################

/**
 *	抽象同事 
 */
public abstract class Colleague {
	protected Mediator mediator; //中介的引用
	
	public Colleague(Mediator mediator){
		this.mediator = mediator;
	}
}


 ③、群组#########################################

/**
 *	具体同事1 
 */
public class ConcreteColleague1 extends Colleague {

	public ConcreteColleague1(Mediator mediator) {
		super(mediator);
	}
	
	public void notifySelf(String message){ //通知方法
		System.out.println("同事1收到消息:"+message);
	}
}

 

/**
 *	具体同事2 
 */
public class ConcreteColleague2 extends Colleague {

	public ConcreteColleague2(Mediator mediator) {
		super(mediator);
	}
	
	public void notifySelf(String message){
		System.out.println("同事2收到消息:"+message);
	}
}


 ④、具体中介#########################################

/**
 *	具体中介 
 */
public class ConcreteMediator extends Mediator {
	public ConcreteColleague1 colleague1;
	public ConcreteColleague2 colleague2;
	@Override
	public void send(String message, Colleague colleague) {
		//判断Colleague身份,调用相应的方法
		if(colleague.getClass().getSimpleName().equals("ConcreteColleague1")){
			((ConcreteColleague1)colleague).notifySelf(message);
		}else{
			((ConcreteColleague2)colleague).notifySelf(message);
		}
	}
}


 测试方法:

public class Test {
   public static void main(String[] args) throws Exception{
	   Mediator mediator = new ConcreteMediator();		//中介
	   Colleague c1 = new ConcreteColleague1(mediator); //同事1,引入中介
	   Colleague c2 = new ConcreteColleague2(mediator); //同事2,引入中介
	   
	   //消息传递
	   mediator.send("请问您是Duke吗?", c1);
	   mediator.send("周末去哪玩啊?", c2);
   }
}


 

 运行结果:
 同事1收到消息:请问您是Duke吗?
 同事2收到消息:周末去哪玩啊?

 中介者模式很容易在系统中应用,也很容易在系统中误用。当系统中出现“多对多”交互复杂的对象群时,
 不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值