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"> //具体的同事类 2private 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
- Java中介者设计模式
- JAVA-中介者设计模式
- Java设计模式-----Mediator中介者模式
- Java设计模式-----Mediator中介者模式
- 设计模式(java) ------ 中介者模式
- JAVA-设计模式之中介者模式
- JAVA系列-设计模式-中介者模式
- java设计模式--mediator 中介者模式
- Java设计模式---中介者模式
- java设计模式之中介者模式
- Java设计模式-7-中介者模式
- Java 设计模式之中介者模式
- Java 设计模式之中介者模式
- Java 设计模式之中介者模式
- Java设计模式--------中介者模式
- java设计模式-中介者模式
- Java设计模式—中介者模式
- java设计模式之中介者模式
- 一款java休闲小游戏--黑白棋
- Bitmap的加载与Cache(一)
- 排序算法总结
- CSS样式二--字体、文本样式
- 从window中的eclipse中提交jar包到yarn框架运行,出现Exception from container-launch: org.apache.hadoop.util.Shell$
- Java设计模式--------中介者模式
- 1023
- 怎样申请微信公众平台接口测试帐号
- Linux 网卡流量工具详细介绍【转】
- 链表排序
- 数组最大子序列的和
- 中文分词、支持向量机代码实现
- MySql-使用事件调度器(event_scheduler)
- Android 高亮 TextView