中介者模式

简介: 定义:用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。。优点:1.灵活性高,因为将同事类进行了解耦,使其不必有关联性; 2.降低了类的复杂度,将一对多转化成了一对一;


定义:用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。。

优点:1.灵活性高,因为将同事类进行了解耦,使其不必有关联性;

          2.降低了类的复杂度,将一对多转化成了一对一;

缺点:1.中介者使用过多,中介者类太过负责,会使系统变得复杂难以维护;

使用场景:多个对象耦合改成只关联一个中介者 如 聊天室   ,房屋中介,淘宝,相当于一个平台连接各使用者  

image.png

原理:将原来各个类的相互调用,转换成调用一个中间类,而中间类去调用每个成员对象,这样可以去掉各个成员类的耦合关系,如果要增加或改变成员对象,直接修改中间成员就可以了。

类图:

image.png

 

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. }

Colleague 成员类的接口

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


相关文章
|
1月前
行为型 中介者模式
行为型 中介者模式
24 0
|
1月前
|
设计模式 Java 数据库连接
聊聊Java设计模式-中介者模式
中介者(Mediator)模式指定义了一个单独的中介对象,来封装一组对象之间的交互。即将这组对象之间的交互委派给中介对象,从而来避免对象之间的直接交互。
56 1
|
10月前
|
设计模式 Java
设计模式-行为型模式:中介者模式
设计模式-行为型模式:中介者模式
|
设计模式 Java
Java设计模式-中介者模式(Mediator)
Java设计模式-中介者模式(Mediator)
|
设计模式 Java
Java设计模式——中介者模式
Java设计模式——中介者模式
106 0
Java设计模式——中介者模式
|
设计模式 机器学习/深度学习
我学会了,中介者模式
中介者模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
101 0
我学会了,中介者模式
|
设计模式 Java
Java设计模式 ->中介者模式
Java设计模式 ->中介者模式
85 0
|
前端开发 调度
|
设计模式 Java
Java设计模式-中介者模式
Java设计模式-中介者模式
129 0
Java设计模式-中介者模式