Java设计模式之中介者模式的实现方式
作者:.番茄炒蛋 时间:2022-08-10 23:43:06
介绍
Java中介者模式(Mediator Pattern)是一种行为设计模式,它可以降低多个对象之间的耦合性,通过一个中介者对象来协调这些对象的交互.
在中介者模式中,多个对象之间的交互不是直接进行的,而是通过一个中介者对象来进行的.这个中介者对象封装了对象之间的交互逻辑,每个对象只需要与中介者对象进行通信,而不需要与其他对象直接进行通信.这种模式可以有效的减少代码的复杂度和维护成本,提高系统的可扩展性和可维护性.
在Java中, 中介者模式可以通过一个接口或抽象类来定义中介者对象,该中介者对象可以定义一些方法来处理对象之间的通信.同时,需要实现一些具体的对象类,这些对象类需要持有中介者对象,并且需要实现一些方法来与中介者对象进行通信.通过这种方式,可以实现对象之间的解耦,提高代码的可读性和可维护性.
实现
抽象中介者
public abstract class Mediator {
public abstract void send(String message, Colleague colleague);
}
具体中介者
public class ConcreteMediator extends Mediator{
private ConcreteColleague1 concreteColleague1;
private ConcreteColleague2 concreteColleague2;
public void setConcreteColleague1(ConcreteColleague1 concreteColleague1) {
this.concreteColleague1 = concreteColleague1;
}
public void setConcreteColleague2(ConcreteColleague2 concreteColleague2) {
this.concreteColleague2 = concreteColleague2;
}
@Override
public void send(String message, Colleague colleague) {
if (colleague == concreteColleague1){
concreteColleague2.receive(message);
}else {
concreteColleague1.receive(message);
}
}
}
抽象同事类
public abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
}
/**
* 发送消息
*
* @param message
*/
public abstract void send(String message);
/**
* 消费消息
* @param message
*/
public abstract void receive(String message);
}
具体同事类
public class ConcreteColleague1 extends Colleague {
public ConcreteColleague1(Mediator mediator) {
super(mediator);
}
/**
* 发送消息
*
* @param message
*/
@Override
public void send(String message) {
mediator.send(message, this);
}
/**
* 消费消息
*
* @param message
*/
@Override
public void receive(String message) {
System.out.println("concreteColleague1收到消息:" + message);
}
}
public class ConcreteColleague2 extends Colleague {
public ConcreteColleague2(Mediator mediator) {
super(mediator);
}
/**
* 发送消息
*
* @param message
*/
@Override
public void send(String message) {
mediator.send(message, this);
}
/**
* 消费消息
*
* @param message
*/
@Override
public void receive(String message) {
System.out.println("concreteColleague2收到消息:" + message);
}
}
测试
public class Demo {
public static void main(String[] args) {
ConcreteMediator mediator = new ConcreteMediator();
ConcreteColleague1 concreteColleague1 = new ConcreteColleague1(mediator);
ConcreteColleague2 concreteColleague2 = new ConcreteColleague2(mediator);
mediator.setConcreteColleague1(concreteColleague1);
mediator.setConcreteColleague2(concreteColleague2);
concreteColleague1.send("Hello concreteColleague2");
concreteColleague2.send("Hello concreteColleague1");
}
}
在上面代码中,抽象中介者Mediator定义了同事类之间通信的接口,具体中介者类ConcreteMediator实现了这个接口,并持有同事类列表.抽象同事类Colleague定义了同事类的通信接口,具体同事类ConcreteColleague1和ConcreteColleague2分别实现了这个接口,实现了具体的通信逻辑.在测试代码中,我们创建了一个中介者对象,然后创建了两个同事对象并将他们加入到中介者对象的同事列表中,最后测试了它们之间的通信.
当多个对象之间存在复杂的交互关系,且彼此之间的耦合度较高时,可以考虑使用中介者模式进行重构.
当系统中存在大量的对象,而且它们之间的交互关系错综复杂时,可以考虑使用中介者模式进行简化和优化.
当需要再不影响其他部分的情况下扩展和修改系统时,可以使用中介者模式来实现系统的灵活性和可扩展性.
来源:https://blog.csdn.net/qq_43135259/article/details/129447393
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java发送post方法详解
C#实现char字符数组与字符串相互转换的方法
详解使用Spring的BeanPostProcessor优雅的实现工厂模式
Java中将File转化为MultipartFile的操作
Android实现旋转动画
详解springmvc常用5种注解
![](https://img.aspxhome.com/file/2023/4/68514_0s.png)
Android录制声音文件(音频)并播放
![](https://img.aspxhome.com/file/2023/5/117135_0s.jpg)
java微信支付接入流程详解
![](https://img.aspxhome.com/file/2023/2/82992_0s.png)
Android高仿京东垂直循环滚动新闻栏
![](https://img.aspxhome.com/file/2023/7/139557_0s.gif)
Java最长公共子序列示例源码
Kotlin Flow数据流的3种使用场景详解
android短信管理器SmsManager实例详解
java.exe和javaw.exe的区别及使用方法
![](https://img.aspxhome.com/file/2023/0/113250_0s.png)
在C#中创建和读取XML文件的实现方法
Java double转BigDecimal的注意事项说明
一篇带你解析入门LongAdder源码
![](https://img.aspxhome.com/file/2023/1/60401_0s.png)
C# .NET中Socket简单实用框架的使用教程
![](https://img.aspxhome.com/file/2023/0/106350_0s.jpg)
mybatis-plus QueryWrapper 添加limit方式
java线程池的四种创建方式详细分析
![](https://img.aspxhome.com/file/2023/4/69674_0s.png)