命令模式(Command Pattern)

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

命令模式(Command Pattern)

一、定义

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

二、优缺点

优点: 1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。

缺点: 1、使用命令模式可能会导致某些系统有过多的具体命令类。

三、具体实现

3.1 原型图
命令模式(Command Pattern)
  1. Command:声明执行操作的接口。
  2. ConcreteCommand:将一个接收者对象绑定于一个动作。调用接收者相应的操作,以实现Execute。
  3. Client:创建一个具体命令对象并设定它的接受者。
  4. Invoker:要求该命令执行这个请求。
  5. Receiver:知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接受者。
3.2 实现

1、创建一个命令接口 Command。

/**
 * @author zhongtao
 * @date 2023/5/28 14:44
 */
public interface Order {
    void execute();
}

2、创建一个请求类 Client。

/**
 * @author zhongtao
 * @date 2023/5/28 14:44
 */
public class Stock {

    private String name = "商品ABC";
    private int quantity = 10;

    public void buy() {
        System.out.println("Stock [ Name: " + name + ", Quantity:" + quantity + " ]bought ");
    }

    public void sell() {
        System.out.println("Stock [ Name: " + name + ", Quantity:" + quantity + " ]sold ");
    }
}

3、创建实现了Order接口的实体类 ConcreteCommand。

/**
 * @author zhongtao
 * @date 2023/5/28 14:45
 */
public class BuyStock implements Order {
    private Stock abcStock;

    public BuyStock(Stock abcStock) {
        this.abcStock = abcStock;
    }

    @Override
    public void execute() {
        abcStock.buy();
    }
}

/**
 * @author zhongtao
 * @date 2023/5/28 14:46
 */
public class SellStock implements Order {
    private Stock abcStock;

    public SellStock(Stock abcStock) {
        this.abcStock = abcStock;
    }

    @Override
    public void execute() {
        abcStock.sell();
    }
}

4、创建命令调用类 Receiver。

import java.util.ArrayList;
import java.util.List;

/**
 * @author zhongtao
 * @date 2023/5/28 14:46
 */
public class Broker {
    private List<Order> orderList = new ArrayList<>();

    public void takeOrder(Order order) {
        orderList.add(order);
    }

    public void placeOrders() {
        for (Order order : orderList) {
            order.execute();
        }
        orderList.clear();
    }
}

5、使用 Broker 类来接受并执行命令。

/**
 * @author zhongtao
 * @date 2023/5/28 14:47
 */
public class CommandPatternDemo {
    public static void main(String[] args) {
        Stock abcStock = new Stock();

        BuyStock buyStockOrder = new BuyStock(abcStock);
        SellStock sellStockOrder = new SellStock(abcStock);

        Broker broker = new Broker();
        broker.takeOrder(buyStockOrder);
        broker.takeOrder(sellStockOrder);

        broker.placeOrders();
    }
}

6、执行程序,输出结果:文章来源地址https://www.toymoban.com/news/detail-462138.html

Stock [ Name: 商品ABC, Quantity:10 ]bought 
Stock [ Name: 商品ABC, Quantity:10 ]sold 

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

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

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

相关文章

  • 命令模式 Command Pattern 《游戏设计模式》学习笔记

    对于一般的按键输入,我们通常这么做,直接if按了什么键,就执行相应的操作 在这里我们是将用户的输入和程序行为硬编码在一起,这是我们很自然就想到的最快的做法。 但是如果这是一个大型游戏,往往我们需要实现一个按键配置的功能(话说2077直到上线都没有实现这

    2024年02月14日
    浏览(43)
  • 设计模式——命令模式(Command Pattern)+ Spring相关源码

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

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

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

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

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

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

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

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

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

    2024年02月11日
    浏览(44)
  • 命令模式(Command)

    命令模式是一种行为设计模式,可将一个请求封装为一个对象,用不同的请求将方法参数化,从而实现延迟请求执行或将其放入队列中或记录请求日志,以及支持可撤销操作。其别名为动作(Action)模式或事务(Transaction)模式。 命令模式包含如下角色: Command,命令基类,声明一

    2024年02月14日
    浏览(28)
  • C++设计模式_23_Command 命令模式

    我们将Command 和Visitor归为“行为变化”模式。 Command 命令模式与函数对象十分类似,但在C++主流框架中,函数对象(function object)应用的更为广泛。 在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化。“行为变化”模式将组件的行为和组件本身进行解耦,从

    2024年02月06日
    浏览(41)
  • 设计模式之命令模式(Command)的C++实现

    在软件开发过程中,“行为请求者”和“行为实现者”通常呈现一种“紧耦合”,如果行为的实现经常变化,则不利于代码的维护。命令模式可以将行为的请求者和行为的实现者进行解耦。具体流程是将行为请求者封装成一个对象,将行为实现者抽象成一个类。 有2两种不同

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

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

    2024年02月07日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包