设计模式-中介模式
中介模式(Mediator Pattern)是一种行为设计模式,它定义了一个中介对象来封装一系列的对象交互,从而使各个对象不需要显式地相互引用,从而降低对象之间的耦合度,提高系统的可扩展性和可维护性
-
Mediator(中介者):
- 定义了同事对象之间的交互方式。
- 通常包含一个登记同事对象的方法,以便在需要的时候能通知它们。
- 实现了对同事对象之间交互的集中管理,减少了对象之间的直接引用。
-
Colleague(同事类):
- 每个同事类都知道中介者对象,并与其进行交互。
- 同事类之间不直接通信,而是通过中介者对象间接交互。
工作原理:
- 各个同事对象通过调用中介者对象的方法来互相影响,而不是直接调用彼此的方法。
- 中介者对象处理同事对象之间的交互逻辑,它可以决定何时以及如何响应来自同事对象的请求。
代码实现:文章来源:https://www.toymoban.com/news/detail-817339.html
/**
* 抽象同事类
*/
public abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
}
}
/**
* 抽象中介者
*/
public interface Mediator {
/**
* 发送消息方法,得到同事对象和发送消息
*/
void send(String messag,Colleague colleague);
}
/**
* 具体实现同事类1
*/
public class ConcreteColleague1 extends Colleague {
public ConcreteColleague1(Mediator mediator) {
super(mediator);
}
public void send(String message){
this.mediator.send(message,this);
}
public void notify(String message){
System.out.println("同事1得到消息: " + message);
}
}
/**
* 具体实现同事类2
*/
public class ConcreteColleague2 extends Colleague{
public ConcreteColleague2(Mediator mediator) {
super(mediator);
}
public void send(String message){
this.mediator.send(message,this);
}
public void notify(String message){
System.out.println("同事2得到消息: " + message);
}
}
/**
* 具体中介者
*/
public class ConcreteMediator implements Mediator{
private ConcreteColleague1 colleague1;
private ConcreteColleague2 colleague2;
public ConcreteMediator(){}
public void setConcreteMediator(ConcreteColleague1 colleague1) {
this.colleague1 = colleague1;
}
public void setConcreteMediator(ConcreteColleague2 colleague2) {
this.colleague2 = colleague2;
}
/**
* 相互传递消息
*/
@Override
public void send(String message, Colleague colleague){
if (colleague == colleague1){
colleague2.notify(message);
}else{
colleague1.notify(message);
}
}
}
/**
* 中介模式客户端
*/
public class MediatorDemo {
public static void main(String[] args) {
// 创建具体中介
ConcreteMediator concreteMediator = new ConcreteMediator();
// 创建同事1,2
ConcreteColleague1 concreteColleague1 = new ConcreteColleague1(concreteMediator);
ConcreteColleague2 concreteColleague2 = new ConcreteColleague2(concreteMediator);
concreteMediator.setConcreteMediator(concreteColleague1);
concreteMediator.setConcreteMediator(concreteColleague2);
concreteColleague1.send("你吃了么?");
concreteColleague2.send("没呢");
}
}
打印输出:文章来源地址https://www.toymoban.com/news/detail-817339.html
Connected to the target VM, address: '127.0.0.1:12313', transport: 'socket'
同事2得到消息: 你吃了么?
同事1得到消息: 没呢
Disconnected from the target VM, address: '127.0.0.1:12313', transport: 'socket'
到了这里,关于设计模式-中介模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!