【设计模式|行为型】命令模式(Command Pattern)

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

说明

命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,以便在不同的请求者和接收者之间进行解耦、参数化和操作的队列化。命令模式允许你将具体的请求封装为对象,这些对象之间彼此独立,并且可以用不同的请求对客户端进行参数化。

结构
  • 命令接口(Command):声明执行命令的方法。
  • 具体命令类(Concrete Command):实现命令接口,负责执行具体的操作。
  • 接收者类(Receiver):包含了具体的操作方法,由具体命令类调用。
  • 请求者类(Invoker):持有命令对象,并在需要时调用命令的执行方法。
工作原理
  1. 创建命令接口,并声明执行命令的方法,如execute()
  2. 创建具体命令类,实现命令接口,并在execute()方法中调用接收者类的具体操作方法。
  3. 创建接收者类,包含了具体的操作方法。
  4. 创建请求者类,持有命令对象,在需要时调用命令的execute()方法。
优点
  • 解耦请求者和接收者:命令模式将请求者和接收者之间解耦,使得它们可以独立变化,互不影响。
  • 可扩展性:可以轻松添加新的命令类和接收者类,而不会影响已有的代码。
  • 可撤销操作:可以通过维护一个命令历史栈,实现对命令的撤销和重做。
缺点
  • 增加了类和对象的数量:引入命令对象和接收者类,会增加系统中的类和对象的数量。
  • 代码结构复杂化:使用命令模式需要定义许多新的类和接口,因此会增加代码结构的复杂性。
使用场景
  • 需要将请求者和接收者解耦,以便能够在不同的请求者和接收者之间进行灵活的变动和组合。
  • 需要支持撤销操作。
  • 需要将一系列的操作队列化,即可以将命令对象存储在列表中,并按顺序执行。

示例

下面以一个简单的股票交易系统为例,介绍命令模式的应用。

假设我们有一个股票交易系统,我们希望实现以下功能:

  • 可以买入股票(BuyStock命令)。
  • 可以卖出股票(SellStock命令)。
  • 可以撤销上一次的交易操作(Undo命令)。

首先,我们定义命令接口Command,声明了一个execute()方法:

public interface Command {
    void execute();
}

然后,我们创建具体的买入股票命令BuyStockCommand,实现了Command接口:

public class BuyStockCommand implements Command {
    private StockTrade stockTrade;

    public BuyStockCommand(StockTrade stockTrade) {
        this.stockTrade = stockTrade;
    }

    public void execute() {
        stockTrade.buy();
    }
}

再创建具体的卖出股票命令SellStockCommand,同样实现了Command接口:

public class SellStockCommand implements Command {
    private StockTrade stockTrade;

    public SellStockCommand(StockTrade stockTrade) {
        this.stockTrade = stockTrade;
    }

    public void execute() {
        stockTrade.sell();
    }
}

接下来,我们创建股票交易类StockTrade,它包含了具体的买入和卖出操作:

public class StockTrade {
    public void buy() {
        System.out.println("买入股票");
    }

    public void sell() {
        System.out.println("卖出股票");
    }
}

最后,我们创建请求者类StockBroker,它持有命令对象,并在需要时调用命令的execute()方法:

public class StockBroker {
    private Command buyStockCommand;
    private Command sellStockCommand;
    private Command undoCommand;

    public StockBroker(Command buyStockCommand, Command sellStockCommand, Command undoCommand) {
        this.buyStockCommand = buyStockCommand;
        this.sellStockCommand = sellStockCommand;
        this.undoCommand = undoCommand;
    }

    public void buyStock() {
        buyStockCommand.execute();
    }

    public void sellStock() {
        sellStockCommand.execute();
    }

    public void undo() {
        undoCommand.execute();
    }
}

现在,我们可以创建股票交易系统的实例,并进行操作:

public class CommandExample {
    public static void main(String[] args) {
        // 创建股票交易对象
        StockTrade stockTrade = new StockTrade();

        // 创建具体的命令对象
        Command buyStockCommand = new BuyStockCommand(stockTrade);
        Command sellStockCommand = new SellStockCommand(stockTrade);

        // 创建请求者对象
        StockBroker stockBroker = new StockBroker(buyStockCommand, sellStockCommand, buyStockCommand);

        // 执行买入操作
        stockBroker.buyStock(); // 买入股票

        // 执行卖出操作
        stockBroker.sellStock(); // 卖出股票

        // 撤销操作
        stockBroker.undo(); // 买入股票
    }
}

运行结果如下:

买入股票
卖出股票
买入股票文章来源地址https://www.toymoban.com/news/detail-618679.html

到了这里,关于【设计模式|行为型】命令模式(Command Pattern)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 设计模式——命令模式(Command Pattern)+ Spring相关源码

    类型: 行为型模式 目的: 将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 2.1.1 定义命令类接口 2.1.2 定义命令执行者 2.1.3 被处理对象Stock。 菜鸟教程定义 被处理的对象 是Stock。 2.1.4 封装处理Stock的命令 虽然 Runnable 接口本身并不是一个命令模式

    2024年02月06日
    浏览(33)
  • 《golang设计模式》第三部分·行为型模式-02-命令模式(Command)

    命令模式(Command)将类的业务行为以对象的方式封装,以便实现行为的参数化、撤销或重做等需求。 非命令模式的困惑: 类的行为在运行时是以实例方法的形式调用的,当方法执行完毕并返回后,方法栈将会消除;方法的运行状态(主要指局部变量)保存在栈帧中,它会随

    2024年02月07日
    浏览(28)
  • 命令设计模式(Command Pattern)[论点:概念、组成角色、相关图示、示例代码、框架中的运用、适用场景]

            命令设计模式 (Command Pattern)是一种行为设计模式,它将请求的操作封装为一个对象,从而实现请求者和执行者之间的解耦。这样,请求者只需要知道如何发送请求,而无需关心请求的具体执行过程。命令模式在很多场景下都非常有用,例如撤销操作、延迟执行、

    2024年02月01日
    浏览(36)
  • (三)行为模式:2、命令模式(Command Pattern)(C++示例)

    目录 1、命令模式(Command Pattern)含义 2、命令模式的UML图学习 3、命令模式的应用场景 4、命令模式的优缺点 5、C++实现命令模式的实例 1、命令模式(Command Pattern)含义 命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排

    2024年02月12日
    浏览(28)
  • 设计模式行为模式-命令模式

    命令模式(Command Pattern)是一种行为型设计模式,用于将请求封装为对象,从而使你可以使用不同的请求、队列或者日志请求来参数化其他对象。这样可以实现请求的参数化操作、队列化和日志化,且能够支持撤销操作。 命令模式由以下几个核心组件组成: 命令(Command)

    2024年02月10日
    浏览(33)
  • 设计模式-命令模式(Command)

    命令模式(Command Pattern)是一种行为型设计模式,也被称为动作模式或事务模式。它的核心思想是将一个请求封装成一个对象,从而使你可以用不同的请求对客户进行参数化。对请求排队或记录,以及支持可撤销的操作。命令模式的主要目的是将发出请求的对象和执行请求的

    2024年04月27日
    浏览(26)
  • 说说设计模式~命令模式(command)

    回到目录 命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,从而允许我们根据不同的请求将客户端参数化,并且能够将请求排队或记录请求日志、支持撤销操作等。该模式使得请求的发送者和接收者解耦。 使用命令模式的主要目的是将方法调用封

    2024年02月11日
    浏览(33)
  • 【设计模式--行为型--命令模式】

    定义 将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储,传递,调用,增加与管理。 结构 抽象命令类(Command)角色:定义命令的接口,声明执行的方法。 具体命令(Concrete Command)

    2024年02月04日
    浏览(25)
  • 设计模式行为型——命令模式

    目录 命令模式的定义      命令模式的实现 命令模式角色 命令模式类图 命令模式举例 命令模式代码实现 命令模式的特点 优点 缺点 使用场景 注意事项         命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。是对命令的封装,每一个命令都是

    2024年02月14日
    浏览(31)
  • 行为型设计模式——命令模式

    日常生活中,我们出去吃饭都会遇到下面的场景。 定义: 将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。命令模式包含以下主要角色: 抽象命令类(

    2024年01月17日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包