说说设计模式~命令模式(command)

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

回到目录

概述

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

使用命令模式的主要目的是将方法调用封装成对象,这样可以在不同的上下文中使用不同的请求、队列或日志来参数化其他对象。这使得请求的发送者和接收者之间的耦合度降低,并且能够灵活地扩展和变化请求的处理。

包含的对象

命令模式的主要参与者包括:

  • Command(命令):声明执行操作的接口,通常包含执行方法 execute()
  • ConcreteCommand(具体命令):实现 Command 接口,将一个接收者对象绑定于一个动作,并实现执行方法。
  • Receiver(接收者):执行命令的相关操作,是具体业务逻辑的实际执行者。
  • Invoker(调用者):发出具体命令并要求命令执行请求的对象。
  • Client(客户端):创建具体命令对象并设置其接收者。

在代码中的体现

以下是一个使用命令模式的简单示例,以控制电灯的开关操作为例:

  1. 定义命令接口和具体命令类:
// Command(命令)
public interface Command {
    void execute();
}

// ConcreteCommand(具体命令)
public class LightOnCommand implements Command {
    private Light light;

    public LightOnCommand(Light light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.turnOn();
    }
}
  1. 定义接收者类:
// Receiver(接收者)
public class Light {
    public void turnOn() {
        System.out.println("Light turned on");
    }

    public void turnOff() {
        System.out.println("Light turned off");
    }
}
  1. 定义调用者类:
// Invoker(调用者)
public class RemoteControl {
    private Command command;

    public void setCommand(Command command) {
        this.command = command;
    }

    public void pressButton() {
        command.execute();
    }
}
  1. 客户端代码示例:
// Client(客户端)
public class Main {
    public static void main(String[] args) {
        // 创建接收者对象
        Light light = new Light();

        // 创建具体命令对象并设置接收者
        Command lightOnCommand = new LightOnCommand(light);

        // 创建调用者对象并设置命令
        RemoteControl remoteControl = new RemoteControl();
        remoteControl.setCommand(lightOnCommand);

        // 执行命令
        remoteControl.pressButton();
    }
}

在上述示例中,命令模式的主要参与者包括 Command 接口和 LightOnCommand 具体命令类。Light

类作为接收者执行实际的命令操作。RemoteControl 类作为调用者负责接收命令并执行。客户端代码创建接收者对象、具体命令对象和调用者对象,并将它们组合在一起进行命令的执行。

通过命令模式,我们可以将控制电灯开关的操作封装成一个命令对象,使得命令的发送者和接收者解耦,且能够动态地设置命令并执行。这样的设计可以方便地扩展和修改命令的处理逻辑,以及支持命令的撤销和重做操作等。
回到目录文章来源地址https://www.toymoban.com/news/detail-504070.html

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

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

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

相关文章

  • C++设计模式_23_Command 命令模式

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

    2024年02月06日
    浏览(44)
  • 23种设计模式之命令模式(Command Pattern)

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的命令模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬不吝赐教 👏👏。 小威在此先感谢各位大佬啦~~🤞🤞

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

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

    2024年02月10日
    浏览(39)
  • C#设计模式(15)命令模式(Command Pattern)

    命令模式(Command Pattern) 命令模式是一种数据驱动的设计模式,属于行为型模式类别。请求被包装在一个对象中作为命令,并传递给调用对象。调用对象寻找可以处理该命令的合适对象,并将命令传递给相应的对象,该对象执行命令。 实现 步骤 1 :创建一个命令接口。 步骤

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

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

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

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

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

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

    2024年02月01日
    浏览(50)
  • 说说设计模式~委派模式

    回到目录 委派模式(Delegate Pattern)又叫作委托模式,是一种面向对象的设计模式,允许对象组合实现与继承相同的代码重用。它的基本作用就是负责任务的调用和分配,是一种特殊的静态代理模式,可以理解为全权代理模式,但是代理模式注重过程,而委派模式注重结果。委派模式属于

    2024年02月11日
    浏览(36)
  • 说说设计模式~责任链模式

    回到目录 它是一种设计模块,主要将操作流程与具体操作解耦,让每个操作都可以设置自己的操作流程,这对于工作流应用是一个不错的选择! 下面是官方标准的定义:责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一

    2024年02月11日
    浏览(37)
  • 说说设计模式~管道模式(pipeline)

    回到目录 复合的责任链,类似于管道模式,只要符合条件,说会向下传递,不会终止 按最高优先级去使用,符合就用,不符合就走下一个策略 具体链条,有点像pipeline管道模式 BlackHandler ip=172.17.0.11 RateLimitHandler header=is-black WriteBlackHandler header=real-black AbstractHandler 抽象的责任处

    2024年02月11日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包