中介模式也叫中间人模式,听名字就应该知道的差不多了。下面例子中张三李四中间就有个中间人,代码如下:
public abstract class Mediator {
public abstract void contact(String content, String name);
public static class Colleague {
protected String name;
protected Mediator mediator;
public Colleague(String name, Mediator mediator) {
this.name = name;
this.mediator = mediator;
}
public void contact(String message, String name) {
mediator.contact(message, name);
}
}
public static class ColleagueA extends Colleague {
// 具体同事类继承自Colleague,此刻就可以与中介者mediator进行通信了
public ColleagueA(String name, Mediator mediator) {
super(name, mediator);
}
public void getMessage(String message) {
System.out.println(name + "获得信息:" + message);
}
}
public static class ColleagueB extends Colleague {
public ColleagueB(String name, Mediator mediator) {
super(name, mediator);
}
public void getMessage(String message) {
System.out.println(name + "获得信息:" + message);
}
}
//定义具体中介者ConcreteMediator,具体中介者通过协调各同事对象实现协作行为,了解并维护它的各个同事。
public static 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, String name) {
if (Objects.equals(name, collA.name)) {
collA.getMessage(content);
} else if (Objects.equals(name, collB.name)) {
collB.getMessage(content);
}
}
}
public static void main(String[] args) {
// 定义中介者
ConcreteMediator mediator = new ConcreteMediator();
// 定义具体同事类
ColleagueA colleagueA = new ColleagueA("张三", mediator);
ColleagueB colleagueB = new ColleagueB("李四", mediator);
// 中介者知晓每一个具体的Colleague类
mediator.setCollA(colleagueA);
mediator.setCollB(colleagueB);
colleagueA.contact("我是张三,我要和同事B说说工作的事情", "李四");
colleagueB.contact("我是李四,我下午有时间,下午商量吧", "张三");
// colleagueC.contact("我是老板,下午开个会", "公司所有人"); //老板只说公司所有人,中间人会挨个通知
}
}
输出:
李四获得信息:我是张三,我要和同事B说说工作的事情
张三获得信息:我是李四,我下午有时间,下午商量吧
那问题来了,张三直接通知李四不更好吗。是的,但如果是老板要开会呢?总不能让老板挨个告诉吧。所以有了注释了的那句,所以一般老板有助理。有兴趣的试着补全代码。
觉得容易理解的话面向对象的23种设计模式点这里