设计模式(016)行为型之命令模式

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

        命令模式,它将请求封装成一个对象,从而允许客户端参数化操作队列、记录请求日志、支持撤销操作等。在命令模式中,有四个核心角色:命令接口(Command)、具体命令(ConcreteCommand)、调用者(Invoker)、接收者(Receiver)。
① 命令接口(Command):声明了执行命令的方法,是命令对象的抽象表示。
② 具体命令(ConcreteCommand):实现了命令接口,具体定义了要执行的操作。
③ 调用者(Invoker):负责调用命令对象执行请求,它并不知道具体的命令细节,只知道调用命令对象的方法来完成请求。
④ 接收者(Receiver):负责实际执行命令指定的操作。
命令模式的核心思想是将请求的发送者与请求的接收者解耦,通过命令对象将二者进行绑定。这样可以实现对请求的封装、记录、排队和撤销操作等功能

1、场景设计

实现场景:请求者发出命令,接收者接收命令并执行一个动作。

2、C++实现

`Command` 是命令接口,定义了一个纯虚的 `execute()` 方法。`ConcreteCommand` 是具体命令,实现了 `Command` 接口,并在 `execute()` 方法中调用了接收者的 `action()` 方法。`Receiver` 是接收者,负责实际执行命令指定的操作。`Invoker` 是调用者,负责维护一系列命令,并负责调用这些命令执行请求。在 `main()` 函数中,我们创建了一个接收者、一个具体命令和一个调用者,并将具体命令添加到调用者中执行。

#include <iostream>
#include <vector>

// 命令接口
class Command {
    public:
        virtual void execute() = 0;
};

// 接收者
class Receiver {
    public:
        void action() {
            std::cout << "Receiver: Executing action" << std::endl;
        }
};

// 具体命令
class ConcreteCommand : public Command {
    private:
        class Receiver *receiver;

    public:
        ConcreteCommand(class Receiver *recv) : receiver(recv) {}

        void execute() override {
            receiver->action();
        }
};

// 调用者
class Invoker {
    private:
        std::vector<Command *> commands;

    public:
        void addCommand(Command *cmd) {
            commands.push_back(cmd);
        }

        void executeCommands() {
            for (Command *cmd : commands) {
                cmd->execute();
            }
            commands.clear();
        }
};

int main() {
    Receiver *receiver = new Receiver();
    Command *command = new ConcreteCommand(receiver);
    Invoker *invoker = new Invoker();

    invoker->addCommand(command);
    invoker->executeCommands();

    delete receiver;
    delete command;
    delete invoker;

    return 0;
}

3、Java实现

`Command` 是命令接口,定义了一个 `execute()` 方法。`ConcreteCommand` 是具体命令,实现了 `Command` 接口,并在 `execute()` 方法中调用了接收者的 `action()` 方法。`Receiver` 是接收者,负责实际执行命令指定的操作。`Invoker` 是调用者,负责调用命令对象执行请求。在 `main()` 方法中,我们创建了一个接收者、一个具体命令和一个调用者,并将具体命令绑定到调用者上执行。文章来源地址https://www.toymoban.com/news/detail-847358.html

package behavioralpattern.command;

public class CommandDemo {
    // 命令接口
    interface Command {
        void execute();
    }
    // 具体命令
    static class ConcreteCommand implements Command {
        private Receiver receiver;
        ConcreteCommand(Receiver receiver) {
            this.receiver = receiver;
        }
        @Override
        public void execute() {
            receiver.action();
        }
    }

    // 接收者
    static class Receiver {
        void action() {
            System.out.println("Receiver: Executing action");
        }
    }

    // 调用者
    static class Invoker {
        private Command command;
        void setCommand(Command command) {
            this.command = command;
        }
        void executeCommand() {
            command.execute();
        }
    }

    public static void main(String[] args) {
        Receiver receiver = new Receiver();
        Command command = new ConcreteCommand(receiver);
        Invoker invoker = new Invoker();

        invoker.setCommand(command);
        invoker.executeCommand();
    }
}

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

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

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

相关文章

  • 设计模式(十三):行为型之模板方法模式

    设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式(七):结构型之适配器模式 设计模式(八):结构型之装

    2024年02月08日
    浏览(40)
  • 【Java 设计模式】行为型之责任链模式

    责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,用于将请求发送者和接收者解耦,使得多个对象都有机会处理请求。责任链模式通过创建一个处理请求的链,将请求沿着链传递,直到有一个对象能够处理为止。在本文中,我们将深入研究Java中责任链模式的定

    2024年01月24日
    浏览(40)
  • C++设计模式行为型之观察者模式

    一、 概述         观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 二、 示例代码 #include list class Subject; class Observer { public:     virtual ~Observer();     virtual void Update(Subject* theChangedSubject) =

    2024年02月14日
    浏览(28)
  • 深入理解设计模式-行为型之观察者

    观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种 一对多的依赖关系 ,让 多个观察者对象 同时监听一个 主题对象 ,当 主题对象 发生 变化 时,所有依赖于它的 观察者 对象都会得到 通知并更新。 在观察者模式中,有两个主要角色: Subject(主题):维护

    2024年02月12日
    浏览(33)
  • 深入理解设计模式-行为型之模板(和回调区别联系)

    模板设计模式(Template Design Pattern)是一种行为型设计模式,它定义了一个算法的骨架,将算法的一些步骤延迟到子类中实现。模板设计模式允许 子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板设计模式的核心思想是:将一个算法的 主要结构定义在一个模板

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

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

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

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

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

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

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

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

    2024年01月17日
    浏览(35)
  • 设计模式—行为型模式之命令模式

    命令(Command)模式:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。 命令模式包含以下主要角色。 抽象命令类(Command)角色:声明执行命令的接口,

    2024年01月25日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包