Java设计模式--------中介者模式

中介者模式(Mediator):用一个中介者对象来封装一系列的对象交互。中介者使得各个对象不需要显式的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。

简单场景:两个同事通过中介者相互通讯。

Mediator:抽象中介者,定义了同事对象带中介者对象的接口。

Colleague:抽象同事类。

ConcreteMediator:具体中介者对象,实现抽象中介者的方法,他需要知道具体同事类,并从具体同事类接受消息,向具体同事类发出消息。

ConcreteColleague_1:具体同事类1只知道自己的行为,而不了解其他具体同事的情况,但是他们都认识中介者对象。

ConcreteColleague_2:具体同事类2只知道自己的行为,而不了解其他具体同事的情况,但是他们都认识中介者对象。

下面看具体实现的代码:

Mediator:抽象中介者

package com.tian.mdeiator;

/**
 * @author 作者 : TianLuhua
 * @version 创建时间:2016年4月20日 下午11:16:18 抽象中介者
 */
public abstract class Mediator {
       
        //发送消息的抽象方法,具体的同事类调用该方法来向其他同事发送消息
	public abstract void send(String name, Colleague colleague);
        //认识同事类的方法
	public abstract void setColleague(Colleague colleague);

}

Colleague:抽象同事类

package com.tian.mdeiator;

/**
 * @author 作者 : TianLuhua
 * @version 创建时间:2016年4月20日 下午11:17:24
 * 抽象同事类
 */
public abstract class Colleague {

       protected Mediator mediator;

	public Colleague(Mediator mediator) {
                //让具体同事类认识中介者
               this.mediator = mediator;
                //在具体同事类认识中介者的同时,也让中介者认识具体的同事类。便于传递消息
               mediator.setColleague(this);
		
	}

	//发送消息的抽象方法
	abstract void send(String message);
        //接受消息的抽象方法
	abstract void notify(String message);

}

ConcreteMediator:具体中介者

package com.tian.mdeiator;

/**
 * @author 作者 : TianLuhua
 * @version 创建时间:2016年4月20日 下午11:19:31 具体中介者类
 */
public class ConcreteMediator extends Mediator {

        //具体的同事类 1
	private ConreteColleague_1 colleague_1;
<pre name="code" class="java">       //具体的同事类 2
 private ConreteColleague_2 colleague_2;

//Colleague 作为参数进来就好比中介者需让认识具体的同事类,然后盘对是那个具体的同事类,在将其的消息给到他,@Overridepublic void send(String message, Colleague colleague) {if (colleague == colleague_1) {colleague_2.notify(message);} else {colleague_1.notify(message);}} @Overridepublic void setColleague(Colleague colleague) {if (colleague instanceof ConreteColleague_1) {colleague_1 = (ConreteColleague_1) colleague;} else {colleague_2 = (ConreteColleague_2) colleague;}}}

 

ConreteColleague_1:具体同事类 1

package com.tian.mdeiator;

/**
 * @author 作者 : TianLuhua
 * @version 创建时间:2016年4月20日 下午11:20:45
 * 
 */
public class ConreteColleague_1 extends Colleague {

	public ConreteColleague_1(Mediator mediator) {
		super(mediator);
		
	}

	@Override
	void send(String message) {
                <pre name="code" class="java">               //具体同事类发送消息是通过中介者的send方法来发送消息的
mediator.send(message, this);}@Overridevoid notify(String message) {System.out.println("得到同事2信息:" + message);}}

 

ConreteColleague_2:具体同事类 2

package com.tian.mdeiator;

/**
 * @author 作者 : TianLuhua
 * @version 创建时间:2016年4月20日 下午11:21:15
 * 
 */
public class ConreteColleague_2 extends Colleague {

	public ConreteColleague_2(Mediator mediator) {
		super(mediator);
	
	}

	@Override
	void send(String message) {
        //具体同事类发送消息是通过中介者的send方法来发送消息的
        mediator.send(message, this);

	}

	@Override
	void notify(String message) {
		System.out.println("得到同事1信息:" + message);

	}

}

客户端调用:

package com.tian.mdeiator;

/**
 * @author 作者 : TianLuhua
 * @version 创建时间:2016年4月20日 下午11:28:14 客户端
 */
public class Main {
	public static void main(String[] args) {
		ConcreteMediator mediator = new ConcreteMediator();
		ConreteColleague_1 colleague_1 = new ConreteColleague_1(mediator);
		ConreteColleague_2 colleague_2 = new ConreteColleague_2(mediator);
		colleague_1.send("你吃饭了吗?");
		colleague_2.send("还没呢!你准备请客吗?");
		

	}
}

打印结果:

得到同事1信息:你吃饭了吗?
得到同事2信息:还没呢!你准备请客吗?

怎么样看懂了吗?

最好的将简单的代码动手敲一遍,加深印象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值