设计模式之中介者模式

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

详细介绍

        中介者模式(Mediator Pattern)是一种行为设计模式,它通过定义一个中介类来封装多个对象之间的交互,使各对象不需要显示地相互引用,从而降低耦合度,提高系统的可维护性和灵活性。中介者模式将原本一对多的网状关系转变为一对多的关系,即每个对象只与中介者对象通信,而中介者负责将消息转发给正确的对象,从而实现对象之间的解耦。 

核心组件:

  • Mediator(中介者):定义一个接口,用于声明所有同事对象需要调用的中介方法。
  • ConcreteMediator(具体中介者):具体实现中介者接口,协调各个同事对象的交互,维持同事对象间的松耦合关系。
  • Colleague(同事):定义一个接口,声明同事对象所知道的中介者。每个同事只知道中介者而不知道其他同事的存在。
  • ConcreteColleague(具体同事):实现同事接口,实现自身业务逻辑,并通过中介者与其他同事通信。

使用场景

  1. 多个对象间存在复杂的相互依赖关系:当多个对象之间的直接交互复杂且难以管理时,可以使用中介者模式来简化对象间的通信。
  2. 需要降低对象间的耦合度:通过引入中介者,可以避免对象间的直接引用,从而降低系统的耦合度。
  3. 需要集中控制交互:当需要对一组对象的交互进行集中管理时,中介者模式可以提供一个中心控制点。

注意事项

  1. 中介者不应知道所有同事的详细信息:中介者应该只了解它需要协调的交互细节,而不必知道同事的具体实现。
  2. 避免过度集中:过度集中所有的交互到一个中介者可能会导致中介者本身变得过于复杂,考虑使用多个中介者来分解复杂性。
  3. 性能考量:中介者作为消息的中转站,频繁的调用可能会成为性能瓶颈,需注意优化。

优缺点

优点:

  • 降低耦合度:同事之间不直接通信,减少了相互依赖。
  • 简化对象间通信:通过中介者统一管理交互,简化了系统结构。
  • 易于维护和扩展:新增或修改同事类时,只需修改中介者即可,不影响其他同事。

缺点:

  • 中介者可能会变得复杂:随着系统复杂度增加,中介者可能需要处理越来越多的交互逻辑。
  • 不适用简单场景:对于简单的对象交互,引入中介者可能会造成不必要的复杂度。

Java代码示例

假设有一个聊天室系统,包含用户(User)和聊天室(ChatRoom)两种角色。

// 同事接口
interface Colleague {
    void receiveMessage(String message, Colleague sender);
    void sendMessage(String message);
}

// 具体同事:用户
class User implements Colleague {
    private String name;
    private ChatRoom chatRoom;

    public User(String name, ChatRoom chatRoom) {
        this.name = name;
        this.chatRoom = chatRoom;
    }

    @Override
    public void receiveMessage(String message, Colleague sender) {
        System.out.println(name + " received message from " + ((User)sender).getName() + ": " + message);
    }

    @Override
    public void sendMessage(String message) {
        chatRoom.sendMessage(this, message);
    }

    public String getName() {
        return name;
    }
}

// 中介者:聊天室
class ChatRoom implements Mediator {
    @Override
    public void sendMessage(Colleague sender, String message) {
        for (Colleague colleague : users) {
            if (!colleague.equals(sender)) {
                colleague.receiveMessage(message, sender);
            }
        }
    }

    private List<Colleague> users = new ArrayList<>();

    public void addUser(User user) {
        users.add(user);
    }
}

// 使用示例
public class MediatorPatternDemo {
    public static void main(String[] args) {
        ChatRoom chatRoom = new ChatRoom();
        User john = new User("John", chatRoom);
        User jane = new User("Jane", chatRoom);
        
        chatRoom.addUser(john);
        chatRoom.addUser(jane);
        
        john.sendMessage("Hello, Jane!");
        jane.sendMessage("Hi, John! How are you?");
    }
}

使用过程中可能遇到的问题

  1. 中介者过于庞大:当中介者变得庞大和复杂时,可以考虑分解为多个小的中介者,或者引入更多的抽象层次。
  2. 过度集中控制:为了减少中介者负担,可以适当让一些简单的交互直接在同事间发生,仅将复杂的交互逻辑委托给中介者处理。

与其他模式的对比

  • 与观察者模式:两者都涉及对象间的通信,但观察者模式强调一对多的发布-订阅机制,而中介者模式更侧重于简化对象间的直接通信,控制复杂交互。
  • 与外观模式:外观模式为子系统提供一个统一的接口,隐藏子系统的复杂性;而中介者模式关注于协调一组对象之间的交互,降低它们之间的耦合度。
  • 与策略模式:策略模式关注于定义一系列算法,并在运行时选择其中一个算法执行。虽然两者都实现了行为的封装,但中介者模式更侧重于管理对象间的交互,而不是算法的替换。

设计模式之中介者模式,编程语言,设计模式,Java基础,设计模式,中介者模式,java,后端,编程文章来源地址https://www.toymoban.com/news/detail-861802.html

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

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

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

相关文章

  • Java设计模式-中介者模式

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

    2024年02月15日
    浏览(30)
  • 大话设计模式之中介者模式

    中介者模式是一种行为型设计模式,它通过引入一个中介者对象来封装一系列对象之间的交互,从而减少对象之间的直接通信,使得对象之间的耦合度降低,同时提高了系统的可维护性和灵活性。 在中介者模式中,对象之间的通信不再直接发生,而是通过中介者对象来进行。

    2024年04月16日
    浏览(34)
  • 设计模式- 中介者模式(Mediator)

    中介者模式(Mediator Pattern),是一种对象行为型模式。该模式的主要目的是定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合变得松散,并且可以独立地改变它们之间的交互。 抽象中介者(Mediator) :这是中介者模式的核心接口,它定义了同事对象注

    2024年04月26日
    浏览(27)
  • 行为型设计模式——中介者模式

    中介者模式主要是将关联关系由一个中介者类统一管理维护,一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个同事类对象

    2024年01月18日
    浏览(36)
  • C++ 设计模式之 中介者模式

    【声明】本题目来源于卡码网(题目页面 (kamacoder.com)) 【提示:如果不想看文字介绍,可以直接跳转到C++编码部分】         -- 什么是中介者模式  (第16种模式)          中介者模式 (Mediator Pattern)也被称为 调停者模式 ,是⼀种 ⾏为型设计模式 ,它通过⼀个中介

    2024年01月19日
    浏览(28)
  • 《设计模式的艺术》笔记 - 中介者模式

            中介者模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为模式。 myclass.h myclass.cpp main.cpp         1. 中介者模式简化了

    2024年01月24日
    浏览(34)
  • 经典的设计模式17——中介者模式

    定义: 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。 结构: 抽象中介者角色:是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。 具体中介者角色:实现中

    2024年02月09日
    浏览(32)
  • 设计模式-行为型模式之中介者模式

    在用户与用户直接聊天的设计方案中,用户对象之间存在很强的 关联性 ,将导致系统出现如下问题: 对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他所有对象,并进行适当处理。 由于一个对象和其他对象具有很强的关联,若没

    2023年04月23日
    浏览(24)
  • 设计模式—行为型模式之中介者模式

    中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,减少对象间混乱的依赖关系,从而使其耦合松散,而且可以独立地改变它们之间的交互。对象行为型模式。 包含以下角色: Mediator: 抽象中介者 ConcreteMediator: 具体中

    2024年01月16日
    浏览(33)
  • Java中介者设计模式

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

    2024年02月16日
    浏览(26)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包