前言
最近小咸儿又开始和小伙伴们一起学习设计模式了,这次的学习其实是建立在之前的几次学习之上的,所以很多内容理解起来更加的快速和深入了,所以小咸儿先来总结一波儿~~
叙述
宝图
定义
使用中介者模式来集中相关对象之间复杂的沟通和控制方式。也就是说:用一个中介者对象来封装一系列对象的交互,从而达到使对象之间松耦合的效果。
优点
- 通过将对象彼此解耦,可以增加对象的复用性
- 通过将控制逻辑集中,可以简化系统维护
- 可以让对象之间所传递的消息变得简单而且大幅减少
用途和缺点
- 中介者尝尝被用来协调相关的GUI组件
- 中介者模式的缺点是,如果设计不当,中介者对象本身会变得过于复杂
实例
在实例中,有一个公司,每个同事都和其他的同事直接关联,如果有什么交接工作的话也会自己去直接找他,日久天长之后,发现每个人需要负责联系的人都太多了,而且很容易负责的工作都搞不清,无法进行正常的交接。这个时候中介者出现了,同事们不在关心,我需要和谁进行交接,直接关心中介者就好了,我说的话,做的事情,中介者会负责帮我传递的,这样大家就职责清晰了。接下来就是具体的代码实现:
代码实现
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:具体同事类。每个具体同事类都只需要知道自己的行为即可,但是都需要认识中介者
- 具体同事A:
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);
}
}
- 具体同事B:
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);
}
}
总结
中介者模式其实就是找了一个中间人,大家都不互相联系了,直接和中间人联系,做什么事情也让他代为传达,以达到解耦的目的,但是在日常使用起来还是有很多需要注意的地方,一不小心这个中间人就会过于复杂。
感谢您的阅读~~