本文共 3259 字,大约阅读时间需要 10 分钟。
最近小咸儿又开始和小伙伴们一起学习设计模式了,这次的学习其实是建立在之前的几次学习之上的,所以很多内容理解起来更加的快速和深入了,所以小咸儿先来总结一波儿~~
使用中介者模式来集中相关对象之间复杂的沟通和控制方式。也就是说:用一个中介者对象来封装一系列对象的交互,从而达到使对象之间松耦合的效果。
在实例中,有一个公司,每个同事都和其他的同事直接关联,如果有什么交接工作的话也会自己去直接找他,日久天长之后,发现每个人需要负责联系的人都太多了,而且很容易负责的工作都搞不清,无法进行正常的交接。这个时候中介者出现了,同事们不在关心,我需要和谁进行交接,直接关心中介者就好了,我说的话,做的事情,中介者会负责帮我传递的,这样大家就职责清晰了。接下来就是具体的代码实现:
Mediator:中介者定义一个接口用于与各个同事对象(Colleague)通信
package pattern.builder.mediator;/** * 定义抽象Mediator,可以与同事们进行联络 * @author Phyllis * @date 2019年6月30日17:05:00 */public abstract class Mediator { /** * 转达通信 * @param content 通信内容 * @param coll 谁传达的 */ public abstract void contact(String content, Colleague coll);}
ConcreteMediator:具体中介者通过协调各个同事对象实现协作行为,了解并维护它的各个同事
package pattern.builder.mediator;/** * 具体中介者类 * @author Phyllis * @date 2019年6月30日17:32:08 */public class ConcreteMediator extends Mediator{ ColleagueA collA; ColleagueB collB; public ColleagueA getCollA(){ return collA; } public void setCollA(ColleagueA collA) { this.collA = collA; } public ColleagueB getCollB() { return collB; } public void setCollB(ColleagueB collB) { this.collB = collB; } @Override public void contact(String content, Colleague coll) { if (coll == collA){ collB.getMessage(content); }else { collA.getMessage(content); } }}
ConcreteMediator:抽象同事类
package pattern.builder.mediator;/** * 定义抽象同事类 * @author Phyllis * @date 2019年6月30日17:06:28 */public abstract class Colleague { protected String name; protected Mediator mediator; public Colleague(String name, Mediator mediator){ this.name = name; this.mediator = mediator; }}
ConcreteMediator:具体同事类。每个具体同事类都只需要知道自己的行为即可,但是都需要认识中介者
package pattern.builder.mediator;/** * 具体同事A * @author Phyllis * @date 2019年6月30日17:09:13 */public class ColleagueA extends Colleague{ /** * 具体同事类继承自Colleague,此刻就可以与中介者mediator进行通信了 * @param name 姓名 * @param mediator 中介者 */ public ColleagueA(String name, Mediator mediator){ super(name,mediator); } public void getMessage(String message){ System.out.println("同事A"+name+"获得信息:"+message); } /** * 同事A与中介者通信 * @param message 通信内容 */ public void contact(String message){ mediator.contact(message,this); }}
package pattern.builder.mediator;/** * 具体同事B * @author Phyllis * @date 2019年6月30日17:15:54 */public class ColleagueB extends Colleague{ /** * 具体同事类继承自Colleague,此刻就可以与中介者mediator进行通信了 * @param name 姓名 * @param mediator 中介者 */ public ColleagueB(String name, Mediator mediator){ super(name,mediator); } public void getMessage(String message){ System.out.println("同事B"+name+"获得信息:"+message); } /** * 同事B与中介者通信 * @param message 信息 */ public void contact(String message){ mediator.contact(message,this); }}
中介者模式其实就是找了一个中间人,大家都不互相联系了,直接和中间人联系,做什么事情也让他代为传达,以达到解耦的目的,但是在日常使用起来还是有很多需要注意的地方,一不小心这个中间人就会过于复杂。
感谢您的阅读~~
转载地址:http://cjerb.baihongyu.com/