设计模式-中介者模式

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

一、前言

本文将详细介绍设计模式中的中介者模式,其中包括,中介者模式的优点、缺点、各组成部分。

二、中介者模式

设计模式-中介者模式,设计模式,设计模式,中介者模式

1、定义

中介者模式(Mediator Pattern)是一种设计模式,它定义了一个中介者类,该类将多个对象之间的通信抽象化,使得这些对象可以通过中介者进行通信,从而降低它们之间的直接耦合度。中介者模式适用于多个对象之间存在复杂的交互关系,直接耦合会导致代码变得复杂、难以维护和扩展。

2、未使用/使用中介者模式对比

2.1、未使用中介者模式:

在没有使用中介者模式的情况下,多个对象之间可能存在直接的相互依赖,导致代码的耦合度较高。当一个对象需要与其他多个对象进行交互时,它可能需要了解这些对象的详细信息,并直接调用它们的方法,这会增加代码的复杂性和难以维护性。

2.2、使用中介者模式:

通过引入中介者模式,可以将多个对象之间的交互抽象化,降低它们之间的直接耦合度。中介者类负责协调和管理各个对象之间的通信,各个对象只需要关注自身的职责,而不必关心其他对象的实现细节。这有助于简化代码,提高可维护性和可扩展性。

在未使用中介者模式的情况下,系统的各个子系统之间直接相互依赖,子系统之间的方法可以直接相互调用。这样的系统耦合性较大,不利于系统的维护和理解。

而使用中介者模式后,子系统之间的依赖关系被打破,各个子系统都只与中介者发生依赖,而不直接与其他子系统发生依赖。这样可以将系统中各个子系统的关系解耦,降低系统的复杂性,简化系统设计和理解。同时,中介者模式的引入也可以方便系统扩展和维护,因为对于子系统的修改和增加,只需要修改或增加中介者相应的处理方法即可,不需要对其他子系统进行修改。

3、角色分析

3.1、中介者(Mediator):

中介者类负责协调和管理各个对象之间的通信。它通常包含一个或多个 Colleague 对象的引用,并提供了相应的方法来处理或转发请求。中介者类通常没有具体的业务逻辑,而是根据需要调用相应的 Colleague 对象的方法。

3.2、同事(Colleague):

同事类是与中介者类进行交互的各个对象。每个同事类通常包含一些特定的业务逻辑,并且可以通过中介者来与其他同事类进行通信。

3.3、客户(Client):

客户类是使用中介者模式的对象。它通常只需要与中介者类进行交互,而不需要直接与各个同事类进行交互。

4、中介者模式案例分析

以电商平台的订单管理系统为例,订单管理系统涉及多个角色,如订单、购物车、用户等。这些角色之间存在复杂的交互关系,例如用户添加商品到购物车后可以提交订单,购物车可以修改订单状态等。

4.1、中介者

订单管理系统可以作为一个中介者,负责协调和管理各个角色之间的通信。例如,当用户提交订单时,订单管理系统可以调用购物车和库存管理系统的相关方法来处理请求。

4.2、同事

购物车、库存管理系统、支付系统等可以作为同事类,它们具有各自的业务逻辑,并可以通过订单管理系统进行通信。例如,购物车可以修改订单状态,库存管理系统可以检查商品库存等。

4.3、客户

用户可以作为客户类,他们只需要与订单管理系统进行交互,而不需要直接与其他同事类进行交互。用户可以通过订单管理系统来查看订单状态、取消订单等。

通过引入中介者模式,可以将各个角色之间的交互抽象化,降低它们之间的直接耦合度。这有助于简化代码,提高可维护性和可扩展性。

5、代码示例

// 中介者接口  
interface OrderMediator {  
    void addItemToCart(String itemId, int quantity);  
    void submitOrder(String userId);  
}  
  
// 购物车同事类  
class ShoppingCart implements Colleague {  
    private Map<String, Integer> items = new HashMap<>();  
    private OrderMediator mediator;  
  
    public ShoppingCart(OrderMediator mediator) {  
        this.mediator = mediator;  
    }  
  
    @Override  
    public void handle(String message) {  
        if (message.startsWith("add")) {  
            String[] parts = message.split("\\s+");  
            addItemToCart(parts[1], 1);  
        } else if (message.equals("submit")) {  
            submitOrder(getUserId());  
        }  
    }  
  
    private void addItemToCart(String itemId, int quantity) {  
        items.put(itemId, items.getOrDefault(itemId, 0) + quantity);  
        mediator.addItemToCart(itemId, quantity);  
    }  
  
    private void submitOrder(String userId) {  
        // TODO: 提交订单的逻辑实现  
        System.out.println("Order submitted by user: " + userId);  
    }  
  
    private String getUserId() {  
        // TODO: 获取用户ID的逻辑实现  
        return "User123";  
    }  
}  
  
// 库存管理系统同事类  
class InventorySystem implements Colleague {  
    private Map<String, Integer> inventory = new HashMap<>();  
    private OrderMediator mediator;  
  
    public InventorySystem(OrderMediator mediator) {  
        this.mediator = mediator;  
    }  
  
    @Override  
    public void handle(String message) {  
        if (message.startsWith("check")) {  
            String[] parts = message.split("\\s+");  
            checkInventory(parts[1]);  
        }  
    }  
  
    private void checkInventory(String itemId) {  
        int quantity = inventory.getOrDefault(itemId, 0);  
        System.out.println("Inventory quantity for item " + itemId + ": " + quantity);  
    }  
}  
  
// 订单管理系统中介者类  
class OrderMediatorImpl implements OrderMediator {  
    private Map<String, Colleague> colleagues = new HashMap<>();  
  
    @Override  
    public void addItemToCart(String itemId, int quantity) {  
        Colleague colleague = colleagues.get(itemId);  
        if (colleague != null) {  
            colleague.handle("add " + quantity);  
        } else {  
            System.out.println("Item not found in the cart");  
        }  
    }  
  
    @Override  
    public void submitOrder(String userId) {  
        Colleague colleague = new ShoppingCart(this);  
        colleagues.put(userId, colleague);  
        colleague.handle("submit");  
    }  
}
public class Main {  
    public static void main(String[] args) {  
        OrderMediator orderMediator = new OrderMediatorImpl();  
        Colleague shoppingCart = new ShoppingCart(orderMediator);  
        Colleague inventorySystem = new InventorySystem(orderMediator);  
        orderMediator.addItemToCart("item1", 2); // 将item1加入购物车,数量为2  
        orderMediator.submitOrder("User123"); // 提交订单,用户ID为User123  
        inventorySystem.handle("check item1"); // 检查item1的库存数量  
    }
}

三、总结

中介者模式是一种重要的设计模式,它通过引入中介者类来降低多个对象之间的直接耦合度,从而提高代码的可维护性和可扩展性。在具体应用中,我们需要根据实际需求选择合适的中介者实现方式,并在合适的场景中应用该模式。文章来源地址https://www.toymoban.com/news/detail-696542.html

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

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

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

相关文章

  • 行为型设计模式——中介者模式

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

    2024年01月18日
    浏览(35)
  • 大话设计模式之中介者模式

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

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

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

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

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

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

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

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

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

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

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

    2024年01月24日
    浏览(34)
  • 设计模式-行为型模式之中介者模式

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

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

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

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

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

    2024年02月16日
    浏览(25)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包