设计模式之命令模式

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

定义:
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
目的:
将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。

何时使用:
在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。

如何解决:
通过调用者调用接受者执行命令,顺序:调用者→命令→接受者。

关键代码:定义三个角色:1、received 真正的命令执行对象 2、Command 3、invoker 使用命令对象的入口

主要涉及到以下几个核心角色:

命令(Command):
    定义了执行操作的接口,通常包含一个 execute 方法,用于调用具体的操作。

具体命令(ConcreteCommand):
    实现了命令接口,负责执行具体的操作。它通常包含了对接收者的引用,通过调用接收者的方法来完成请求的处理。

接收者(Receiver):
    知道如何执行与请求相关的操作,实际执行命令的对象。

调用者/请求者(Invoker):
    发送命令的对象,它包含了一个命令对象并能触发命令的执行。调用者并不直接处理请求,而是通过将请求传递给命令对象来实现。

客户端(Client):
    创建具体命令对象并设置其接收者,将命令对象交给调用者执行。
// 定义士兵类
class Soldier {
    public void attack() {
        System.out.println("士兵发起进攻!");
    }
}

// 定义长官类
class Commander {
    private Soldier soldier;

    public Commander(Soldier soldier) {
        this.soldier = soldier;
    }

    // 定义命令接口
    interface Command {
        void execute();
    }

    // 定义具体命令,即长官下达的命令
    class AttackCommand implements Command {
        @Override
        public void execute() {
            soldier.attack();
        }
    }

    // 设置命令
    public void setCommand(Command command) {
        this.command = command;
    }

    // 发布命令
    public void issueCommand() {
        command.execute();
    }

    private Command command;
}

// 客户端
public class CommandPatternExample {
    public static void main(String[] args) {
        // 创建士兵
        Soldier soldier = new Soldier();
        // 创建长官,并指定士兵
        Commander commander = new Commander(soldier);
        // 创建具体命令对象,并设置给长官
        Commander.Command command = commander.new AttackCommand();
        commander.setCommand(command);
        // 长官发布命令
        commander.issueCommand();
    }
}

代码运行截图
设计模式之命令模式,java设计模式,设计模式,命令模式文章来源地址https://www.toymoban.com/news/detail-830546.html

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

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

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

相关文章

  • Java设计模式之行为型-命令模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 4.1、基本实现 4.2、点餐案例  五、总结 1、将一个请求封装为一个对象,使您可以用不同的请求对客户进行参数化。 2、对请求排队或记录请求日志,以及支持可撤销的操作。 3、将命令对象与执行命令的对象分离,

    2024年02月16日
    浏览(35)
  • Java 设计者模式以及与Spring关系(七) 命令和迭代器模式

    本文是个系列一次会出两个设计者模式作用,如果有关联就三个,除此外还会讲解在spring中作用。 23设计者模式以及重点模式 我们都知道 设计者模式 有 3 类 23 种设计模式,标红是特别重要的设计者模式建议都会,而且熟读于心,标蓝是指其次重要建议也要明白。 (1)创建

    2024年01月24日
    浏览(34)
  • 设计模式行为模式-命令模式

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

    2024年02月10日
    浏览(43)
  • 设计模式(19)命令模式

    一、介绍: 1、定义:命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,从而使你可以使用不同的请求对客户端进行参数化。命令模式还支持请求的排队、记录日志、撤销操作等功能。 2、组成结构: (1)命令接口(Command):定义执行命令的方法,可

    2024年02月07日
    浏览(37)
  • 设计模式——命令模式

    将一个请求封装成一个对象,从而让你使用不同的请求吧客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 命令模式是一个高内聚的模式。 优点 类间解耦。调用者与接收者之间没有任何依赖关系。调用者只需要调用execute()方法即可,不需要了

    2024年02月15日
    浏览(38)
  • 设计模式-命令模式

    接受者(Receiver) 请求的实际作用对象 抽象命令(Command) 声明了执行请求的execute方法 具体命令(ConcreteCommand) 调用实际操作对象,实现execute 调用者(Invoker) 调用命令请求发送者 功能键绑定 比如遥控器的功能键,现在想要实现为功能可以自定义绑定事件,请使用命令模

    2024年02月09日
    浏览(39)
  • 设计模式之命令模式

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

    2024年02月20日
    浏览(42)
  • 设计模式:命令模式

    命令模式(Command Pattern)是一种行为设计模式,它将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 定义 命令模式包括以下主要角色: Command :命令接口,声明执行操作的方法。 ConcreteCommand :具

    2024年04月16日
    浏览(41)
  • 【设计模式】命令模式

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

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

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博

    2024年02月01日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包