简化对象间交互:Java中介者模式实践

这篇具有很好参考价值的文章主要介绍了简化对象间交互:Java中介者模式实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

中介者模式 (Mediator Pattern) 是一种在软件设计中用来降低多个对象或组件间的耦合度的设计模式,它属于行为型设计模式。在 Java 中,中介者模式的核心思想是定义一个中介对象,让原本相互依赖的对象之间通过中介者进行通信,而不是直接相互引用。这样可以使各个对象之间的关系更加清晰,更容易维护和扩展。

在现实生活中,中介者模式的例子随处可见,下面是一些直观易懂的生活场景:

  • 房屋租赁中介: 在房屋租赁市场中,房东和租客通常不直接交流,而是通过房地产中介来进行房源信息发布、看房、签约等一系列活动。这里的房地产中介就扮演了中介者的角色,它负责协调房东和租客的需求和沟通,减少了双方直接交流的复杂性和风险。
  • 商业谈判中间人: 在商业交易或合同谈判中,买卖双方有时会聘请律师或专业顾问作为中间人。中间人在谈判过程中传达双方意见,帮助解决分歧,促进协议达成,降低了双方因直接协商可能产生的矛盾冲突。
  • 教育咨询机构: 当学生和学校之间需要建立联系时,教育咨询机构往往会作为一个中介,收集学生需求,推荐适合的学校和课程,协助完成申请流程等。这样的中介角色能够有效连接供需双方,提高信息匹配效率。

以上都是现实生活中的中介者模式应用场景,它们的核心都是引入了一个独立的角色,来管理和协调多方面的交互关系,从而使得各参与方可以专注于自身的核心功能,同时保持系统运行的有序和高效。

代码示例

这里我们将创建了一个中介者对象mediator,以及两个同事对象colleagueA和colleagueB。我们将这两个同事对象添加到中介者的同事列表中,然后分别调用它们的send方法发送消息。由于中介者的存在,这些消息会被转发给其他同事,从而实现了对象之间的通信解耦。

抽象同事类Colleague:

public abstract class Colleague {
    protected Mediator mediator;

    public Colleague(Mediator mediator) {
        this.mediator = mediator;
    }

    public abstract void send(String message);
    public abstract void receive(String message);
}

两个具体同事类ConcreteColleagueA和ConcreteColleagueB,继承自Colleague:

public class ConcreteColleagueA extends Colleague {
    public ConcreteColleagueA(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void send(String message) {
        System.out.println("ConcreteColleagueA sends message: " + message);
        mediator.send(message, this);
    }

    @Override
    public void receive(String message) {
        System.out.println("ConcreteColleagueA receives message: " + message);
    }
}

public class ConcreteColleagueB extends Colleague {
    public ConcreteColleagueB(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void send(String message) {
        System.out.println("ConcreteColleagueB sends message: " + message);
        mediator.send(message, this);
    }

    @Override
    public void receive(String message) {
        System.out.println("ConcreteColleagueB receives message: " + message);
    }
}

具体中介者类ConcreteMediator,在send方法中调用对象的接收方法以通知其他同事:

public interface Mediator {
    void send(String message, Colleague colleague);
}


public class ConcreteMediator implements Mediator {
    private List<Colleague> colleagues;

    public ConcreteMediator() {
        colleagues = new ArrayList<>();
    }

    public void addColleague(Colleague colleague) {
        colleagues.add(colleague);
    }

    @Override
    public void send(String message, Colleague originator) {
        for (Colleague colleague : colleagues) {
            if (colleague != originator) {
                colleague.receive(message);
            }
        }
    }
}

运行函数:

public class Main {
    public static void main(String[] args) {
        Mediator mediator = new ConcreteMediator();

        Colleague colleagueA = new ConcreteColleagueA(mediator);
        Colleague colleagueB = new ConcreteColleagueB(mediator);

        mediator.addColleague(colleagueA);
        mediator.addColleague(colleagueB);

        colleagueA.send("Hello from A");
        colleagueB.send("Hello from B");
    }
}

中介者模式适合应用场景

  1. 当一些对象和其他对象紧密耦合以致难以对其进行修改时, 可使用中介者模式。该模式让你将对象间的所有关系抽取成为一个单独的类, 以使对于特定组件的修改工作独立于其他组件。

  2. 当组件因过于依赖其他组件而无法在不同应用中复用时, 可使用中介者模式。应用中介者模式后, 每个组件不再知晓其他组件的情况。 尽管这些组件无法直接交流, 但它们仍可通过中介者对象进行间接交流。 如果你希望在不同应用中复用一个组件, 则需要为其提供一个新的中介者类。

  3. 如果为了能在不同情景下复用一些基本行为, 导致你需要被迫创建大量组件子类时, 可使用中介者模式。由于所有组件间关系都被包含在中介者中, 因此你无需修改组件就能方便地新建中介者类以定义新的组件合作方式。文章来源地址https://www.toymoban.com/news/detail-846373.html

中介者模式优点

  1. 降低复杂度:通过引入中介者,一对多交互转化为一对一交互,减少了对象间的直接交互次数,从而使程序的复杂程度显著下降。
  2. 解耦:中介者模式通过集中控制交互逻辑,使各对象之间不必彼此了解,降低了类之间的耦合性。这提高了代码的可维护性和可扩展性,因为一个对象的改变不太可能影响到其他对象。
  3. 简化通信:系统中的复杂性被分解到中介者中,使得各个模块职责更加分明,易于管理和维护。

中介者模式缺点

  1. 增加系统的复杂性:需要在系统中额外引入中介者对象,这可能会增加系统结构的复杂性。
  2. 中介者可能变得复杂难维护:当同事类数量增多时,中介者的职责可能随之膨胀,从而变得复杂且难以维护。

到了这里,关于简化对象间交互:Java中介者模式实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【设计模式】深入理解中介者模式,解耦对象之间的复杂交互,实现用户之间的消息传递,优化飞机之间的航线协调,构建高效的系统交互方式

    中介者模式是一种行为型设计模式,其核心思想是通过引入一个中介者对象来封装一组对象之间的交互。这种模式可以降低对象之间的耦合度,使得对象之间的交互更加灵活和可维护。 在现实世界中,我们经常会遇到需要协调多个对象之间交互的场景,例如聊天室中的用户之

    2024年01月23日
    浏览(40)
  • Java中介者模式

    目录 定义 结构 案例 优点 缺点 使用场景 又叫调停模式,定义一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。 中介者模式包含以下主要角色: 抽象中介者角色:它是中介者的接口,提供了同事对象注册与转发同

    2024年02月04日
    浏览(36)
  • Java设计模式-中介者模式

    中介者模式,就是用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地互相引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。 其实中介者模式很简单的,就像它的名字一样,中介,调用某个类的某些方法的时候,我们不直接去跟那个类的实

    2024年02月15日
    浏览(41)
  • Java中介者设计模式

    中介者模式(Mediator Pattern)是一种行为设计模式,它通过封装一系列对象之间的交互,将对象之间的通信集中处理,从而降低对象之间的耦合度。 在中介者模式中,一个中介者对象封装了一系列对象之间的交互关系。中介者使各个对象不需要显式地相互引用,从而使其耦合

    2024年02月16日
    浏览(34)
  • 【Java开发】设计模式 17:中介者模式

    中介者模式是一种行为设计模式,指用一个中介对象来封装一系列的对象交互。 中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。在这个模式中,中介者负责协调各个对象间的通信,使其流程更加清晰简单。 📌  场景 中介者

    2023年04月22日
    浏览(47)
  • Go和Java实现中介者模式

    下面通过一个同事之间相互通信的例子来说明中介者模式的使用。 中介者模式是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的 通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。 意图:用一个中介对象

    2024年02月12日
    浏览(26)
  • 通过简单的中介者模式模型了解迪米特法则(设计模式与开发实践 P14)

    虽然面向对象鼓励将行为分布到各个对象中,把对象划分成更小的粒度有利于对象可复用性,但有时对象之间联系太多又会反而降低可复用性 通过一个中介者对象封装 一组对象之间的交互 ,减少对象间直接耦合,对象之间的通信集中在中介者对象中,使得对象间交互更加简

    2024年02月07日
    浏览(37)
  • 设计模式-中介者模式在Java中使用示例-客户信息管理

    欲开发客户信息管理窗口界面,界面组件之间存在较为复杂的交互关系:如果删除一个客户, 要在客户列表(List)中删掉对应的项,客户选择组合框(ComboBox)中客户名称也将减少一个; 如果增加一个客户信息,客户列表中需增加一个客户,且组合框中也将增加一项。 如果在一个

    2024年02月15日
    浏览(38)
  • 【中介者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    中介者模式(Mediator Pattern)是一种行为型模式。它限制对象之间的直接交互,它用一个中介对象来封装一系列的动作,以让对象之间进行交流。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 当一些对象和其他对象紧密

    2023年04月19日
    浏览(39)
  • 【设计模式——学习笔记】23种设计模式——中介者模式Observer(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    普通实现 在租房过程中,客户可能去找房东问房子是否可以租,但是房东可能要和家人进行一系列的沟通,最后还可能派出另一个家庭成员来和客户进行交流,整个沟通过程非常复杂、沟通线路繁多。如果是写成程序的模式,不同成员之间需要留好接口方便成员之间互相进行

    2024年02月14日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包