定义:用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。。
优点:1.灵活性高,因为将同事类进行了解耦,使其不必有关联性;
2.降低了类的复杂度,将一对多转化成了一对一;
缺点:1.中介者使用过多,中介者类太过负责,会使系统变得复杂难以维护;
使用场景:多个对象耦合改成只关联一个中介者 如 聊天室 ,房屋中介,淘宝,相当于一个平台连接各使用者

原理:将原来各个类的相互调用,转换成调用一个中间类,而中间类去调用每个成员对象,这样可以去掉各个成员类的耦合关系,如果要增加或改变成员对象,直接修改中间成员就可以了。
类图:
Mediator 中介者接口
ConcreteMediator 中介者实现 ,放入具体成员类对象,可以让别的成员类通过自己调用其他成员类
Colleague 成员类的接口
ConcreteColleague 成员类实现 放入中介者类的实例,通过中介者类去调用中介者类里面的成员1(个人理解eureka的感觉 ,将成员都放于服务端,然后需要调用时从服务端取会,如果eureka是通过服务端去调用 那么就完全是中介者模式了)
代码:
中介者接口
1. public abstract class Mediator {
2.
3. //放入需要联系的成员类
4. protected ConcreteColleague1 colleague1;
5. protected ConcreteColleague2 colleague2;
6.
7. //成员类的get set
8. public ConcreteColleague1 getColleague1() {
9. return colleague1;
10. }
11.
12. public void setColleague1(ConcreteColleague1 colleague1) {
13. this.colleague1 = colleague1;
14. }
15.
16. public ConcreteColleague2 getColleague2() {
17. return colleague2;
18. }
19.
20. public void setColleague2(ConcreteColleague2 colleague2) {
21. this.colleague2 = colleague2;
22. }
23.
24. //通过这些方法去调用成员类
25. public abstract void sendMessageToColleague1(String message);
26. //
27. public abstract void sendMessageToColleague2(String message);
28.
29.
30. }
中介者实现类
1. public class ConcreteMediator extends Mediator{
2.
3. //与1成员建立连接
4. @Override
5. public void sendMessageToColleague1(String message) {
6. super.colleague1.receiveMessage(message);
7. }
8.
9. //与2成员建立连接
10. @Override
11. public void sendMessageToColleague2(String message) {
12. super.colleague2.receiveMessage(message);
13. }
14. }
1. public abstract class Colleague {
2. protected Mediator mediator;
3.
4. public Colleague(Mediator mediator) {
5. this.mediator = mediator;
6. }
7. }
ConcreteColleague 成员类实现
1. public class ConcreteColleague1 extends Colleague {
2.
3.
4. public ConcreteColleague1(Mediator mediator) {
5. super(mediator);
6. }
7.
8.
9. public void selfMethod(){
10. System.out.println("成员1:我是成员1");
11. }
12.
13. public void receiveMessage(String message){
14. System.out.println("成员1收到了 "+message);
15. }
16.
17. //成员1和成员2进行沟通1,但是都调用中介者类
18. public void sendMessageToColleague2(String message){
19. super.mediator.sendMessageToColleague2(message);
20. }
21.
22. }
1. public class ConcreteColleague2 extends Colleague {
2.
3. //放入中介者类 以便调用
4. public ConcreteColleague2(Mediator mediator) {
5. super(mediator);
6. }
7.
8.
9. public void selfMethod(){
10. System.out.println("成员2:我是成员1");
11. }
12.
13. public void receiveMessage(String message){
14. System.out.println("成员2收到了 "+message);
15. }
16.
17. //成员1和成员2进行沟通1,但是都调用中介者类
18. public void sendMessageToColleague1(String message){
19. super.mediator.sendMessageToColleague1(message);
20. }
21.
22. }
调用
1. public class Client {
2.
3. public static void main(String[] args) {
4. Mediator mediator=new ConcreteMediator();
5.
6. ConcreteColleague1 colleague1=new ConcreteColleague1(mediator);
7. ConcreteColleague2 colleague2=new ConcreteColleague2(mediator);
8.
9.
10. mediator.setColleague1(colleague1);
11. mediator.setColleague2(colleague2);
12.
13.
14. colleague1.selfMethod();
15. colleague1.sendMessageToColleague2("来自成员1");
16.
17. colleague2.selfMethod();
18. colleague2.sendMessageToColleague1("来自成员2");
19.
20.
21. }
22.
23. }
附上两个经典的代码场景
https://blog.csdn.net/wwwdc1012/article/details/83389158 https://www.2cto.com/kf/201805/750094.html