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

来源:互联网 发布:天庭网络直播间txt下载 编辑:程序博客网 时间:2024/06/07 12:23

中介者模式(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 {        //具体的同事类 1private 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);}@Overridevoid 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);}@Overridevoid send(String message) {        //具体同事类发送消息是通过中介者的send方法来发送消息的        mediator.send(message, this);}@Overridevoid 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
原创粉丝点击