中介者模式
概述
- 中介者模式是行为型模式的一种。
- 用一个中介者对象封装一些列的对象交互,符合迪米特原则,将原有的一对多的关系变成一对一的关系,降低了类之间的耦合。
角色介绍
- 抽象中介者类:定义同事对象到中介者对象的接口。
- 具体中介者类:继承抽象中介者,实现父类定义的方法,接收具体同事的消息,向具体同事发送消息。
- 抽象同事类:定义中介者对象的接口。
- 具体同事类:继承与抽象同事类,向中介者对象发送消息,从中介者对象接收消息。
基本实现
前段时间武当派和峨眉派的的弟子被大力金刚指所杀,大力金刚指是少林派的绝学,因为事情重大,而且少林派实力强大,武当派和峨眉派不能够直接去少林派去问罪,只能上报武林盟主由武林盟主出面进行调停,如下图所示。
抽象中介者类
//抽象中介者类
public abstract class Mediator {
public abstract void notice(String message, Collegue collegue);
}
抽象同事类
//抽象同事类
public abstract class Collegue {
protected Mediator mediator;
public Collegue(Mediator mediator) {
this.mediator = mediator;
}
}
具体同事类
//具体同事类:武当派
public class Wudang extends Collegue {
public Wudang(Mediator mediator) {
super(mediator);
}
public void sendMessage(String message) {
mediator.notice(message, this);
}
public void getNotice(String message) {
System.out.println("武当派收到消息:" + message);
}
}
//具体同事类:峨眉派
public class Emei extends Collegue {
public Emei(Mediator mediator) {
super(mediator);
}
public void sendMessge(String message) {
mediator.notice(message, this);
}
public void getNotice(String message) {
System.out.println("峨眉派收到消息:" + message);
}
}
//具体同事类:少林寺
public class Shaolin extends Collegue {
public Shaolin(Mediator mediator) {
super(mediator);
}
public void sendMessage(String message) {
mediator.notice(message, this);
}
public void getNotice(String message) {
System.out.println("少林寺收到消息:" + message);
}
}
具体中介者类
//具体中介者类
public class Master extends Mediator {
private Wudang wudang;
private Emei emei;
private Shaolin shaolin;
public void setWudang(Wudang wudang) {
this.wudang = wudang;
}
public void setEmei(Emei emei) {
this.emei = emei;
}
public void setShaolin(Shaolin shaolin) {
this.shaolin = shaolin;
}
@Override
public void notice(String message, Collegue collegue) {
if (collegue == wudang) {
shaolin.getNotice(message);
} else if (collegue == emei) {
shaolin.getNotice(message);
} else if (collegue == shaolin) {
wudang.getNotice(message);
emei.getNotice(message);
}
}
}
使用
public class Demo {
public static void main(String[] args) {
Master master = new Master();
Wudang wudang = new Wudang(master);
Emei emei = new Emei(master);
Shaolin shaolin = new Shaolin(master);
master.setWudang(wudang);
master.setEmei(emei);
master.setShaolin(shaolin);
wudang.sendMessage("武当弟子被少林所伤");
emei.sendMessge("峨眉弟子被少林所伤");
shaolin.sendMessage("误会,不可能,绝对不可能!");
}
}
少林寺收到消息:武当弟子被少林所伤
少林寺收到消息:峨眉弟子被少林所伤
武当派收到消息:误会,不可能,绝对不可能!
峨眉派收到消息:误会,不可能,绝对不可能!