调停者模式
定义:用于模块间解耦,通过避免对象互相显式的指向对方从而降低耦合。
个人理解:现在的管理模式,A小组B小组两个小组都有一个经理管理,当外面的需求来了的时候需要AB两个小组配合完成,经理会把需求分发到A小组,A小组完成后提交到经理,经理再把需求和A完成的(B可能需要)下发到B小组,等B小组完成再提交给经理,经理再提供给需求者。
UML图解:
优点:松散耦合、可以集中管理、对象之间关系简化为一对多
缺点:当被管理的对象增多时,调停者难于管理和维护
代码:
//抽象的调停者
interface Mediator{
void sendMessage(Group g);
}
//抽象调停者的对象类
abstract class Group{
/* 持有调停者对象(谁去管理这个小组) */
private Mediator mediator;
public Group(Mediator mediator){
this.mediator = mediator;
}
public Mediator getMediator(){
return mediator;
}
}
//具体管理的对象(小组A 小组B)
class GroupA extends Group{
public GroupA(Mediator mediator) {
super(mediator);
}
//做对应的任务
public void doTask(){
System.out.println("开始A小组的工作");
}
//做完通知调停者
public void operation(){
getMediator().sendMessage(this);
}
}
class GroupB extends Group{
public GroupB(Mediator mediator) {
super(mediator);
}
//做对应的任务
public void doTask(){
System.out.println("开始A小组的工作");
}
//做完通知调停者
public void operation(){
getMediator().sendMessage(this);
}
}
//具体调停者(经理)
class ConcreteMediator implements Mediator{
private GroupA g1;
private GroupB g2;
public void setG1(GroupA g1) {
this.g1 = g1;
}
public void setG2(GroupB g2) {
this.g2 = g2;
}
@Override
public void sendMessage(Group g) {
System.out.println("告知消息");
/*g1.doTask();
g1.operation();
g2.doTask();
g2.operation();*/
}
}
总结:这个模式如果不了解的话就是听他的理解也感觉很熟悉,没错,中间件啊!