首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设计模式-中介者模式

定义

中介者模式(Mediator Pattern):是一种结构型设计模式,它定义了一个中介者(也称为协调者或联络者),它封装了一组对象之间的交互,使得对象之间不需要显式地相互引用,从而使得代码更加灵活。

中介者模式的关键点如下:

定义一个中介者对象。

中介者封装了一组对象之间的交互,这些对象通过接口进行交互。

中介者对象保存了所有引用了它的对象的引用,同时也保存了它们之间的交互链。

对象之间通过接口与中介者进行交互,而不需要显式地相互引用。

中介者可以决定何时将对象之间的交互通知给用户,使得代码更加灵活。

中介者模式是一种解耦工具,它使得我们可以更加轻松地管理复杂的对象之间的交互关系。通过使用中介者模式,我们可以将对象的接口与实现分离,使得代码更加易于理解和维护。同时,中介者模式也可以提高程序的可扩展性和可维护性,使得代码更加易于扩展和修改。

用途

对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。

实例

// Mediator接口定义了send()方法,用于处理对象之间的交互。

interface Mediator {

void send(String message, Colleague colleague);

}

// Colleague抽象类表示对象,它包含一个Mediator对象,用于处理对象之间的通信。

abstract class Colleague {

protected Mediator mediator;

public Colleague(Mediator mediator) {

this.mediator = mediator;

}

public abstract void receive(String message);

public abstract void send(String message);

}

// ConcreteColleague1和ConcreteColleague2是具体的对象实现类,它们实现了Colleague抽象类中的方法。

class ConcreteColleague1 extends Colleague {

public ConcreteColleague1(Mediator mediator) {

super(mediator);

}

@Override

public void receive(String message) {

System.out.println("Colleague1 received message: " + message);

}

@Override

public void send(String message) {

System.out.println("Colleague1 sends message: " + message);

mediator.send(message, this);

}

}

class ConcreteColleague2 extends Colleague {

public ConcreteColleague2(Mediator mediator) {

super(mediator);

}

@Override

public void receive(String message) {

System.out.println("Colleague2 received message: " + message);

}

@Override

public void send(String message) {

System.out.println("Colleague2 sends message: " + message);

mediator.send(message, this);

}

}

// ConcreteMediator是具体的中介者实现类,它负责协调对象之间的通信。

class ConcreteMediator implements Mediator {

private ConcreteColleague1 colleague1;

private ConcreteColleague2 colleague2;

public void setColleague1(ConcreteColleague1 colleague1) {

this.colleague1 = colleague1;

}

public void setColleague2(ConcreteColleague2 colleague2) {

this.colleague2 = colleague2;

}

@Override

public void send(String message, Colleague colleague) {

if (colleague == colleague1) {

colleague2.receive(message);

} else {

colleague1.receive(message);

}

}

}

public class MediatorPatternDemo {

public static void main(String[] args) {

ConcreteMediator mediator = new ConcreteMediator();

ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);

ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);

mediator.setColleague1(colleague1);

mediator.setColleague2(colleague2);

colleague1.send("Hello, Colleague2.");

colleague2.send("Hello, Colleague1.");

}

}

在main()方法中,我们创建了一个ConcreteMediator对象和两个ConcreteColleague对象,并调用它们的send()方法进行通信。通过中介者对象进行通信,避免了对象之间的直接耦合。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OCdfjb4MV2wlL-csUDOSdKiw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券