前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式-中介者模式

设计模式-中介者模式

作者头像
架构狂人
发布2023-10-25 10:49:32
1360
发布2023-10-25 10:49:32
举报
文章被收录于专栏:架构狂人架构狂人

定义

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

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

  1. 定义一个中介者对象。
  2. 中介者封装了一组对象之间的交互,这些对象通过接口进行交互。
  3. 中介者对象保存了所有引用了它的对象的引用,同时也保存了它们之间的交互链。
  4. 对象之间通过接口与中介者进行交互,而不需要显式地相互引用。
  5. 中介者可以决定何时将对象之间的交互通知给用户,使得代码更加灵活。

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

用途

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

实例

代码语言:javascript
复制
// 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.");
    }
}

在上面的代码中,Mediator接口定义了send()方法,用于处理对象之间的交互。Colleague抽象类表示对象,它包含一个Mediator对象,用于处理对象之间的通信。ConcreteColleague1和ConcreteColleague2是具体的对象实现类,它们实现了Colleague抽象类中的方法。ConcreteMediator是具体的中介者实现类,它负责协调对象之间的通信。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 顶尖架构师栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义
  • 用途
  • 实例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档