【软考】设计模式之命令模式

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

1. 说明
  • 1.命令模式(Command Pattern)是一种数据驱动的设计模式。
  • 2.属于行为型模式。
  • 3.请求以命令的形式被封装在对象中,并传递给调用对象。
  • 4.调用对象寻找可以处理该命令的合适对象,并将该命令传递给相应的对象,由该对象执行命令。
  • 5.将请求(行为)封装为对象,从而使你可以用不同的请求对客户进行参数化
  • 6.对请求排队或记录请求日志,以及支持可撤销的操作。
  • 7.这种模式允许将请求的发送者与请求的执行者解耦,使得请求发送者无需关心请求如何被执行,而只需关注请求本身。
2. 应用场景
  • 1.当系统的某项操作具备命令语义,且命令实现不稳定(经常变化)时,可以通过命令模式解耦请求与实现。
  • 2.当请求调用者需要与请求接收者解耦时,命令模式可以使调用者和接收者不直接交互
  • 3.当系统需要随机请求命令或经常增加、删除命令时,命令模式可以方便地实现这些功能。
3. 结构图

【软考】设计模式之命令模式,软考,软考文章来源地址https://www.toymoban.com/news/detail-853083.html

4. 构成
  • 1.Command(命令):定义了执行操作的接口,通常包含一个execute方法,用于调用具体的操作。声明执行操作的接口。
  • 2.Invoker(调用者):请求的调用者,内部持有具体请求的引用。要求该命令执行这个请求。
  • 3.ConcreteCommand(具体命令):封装的请求对象,内部持有Receiver对象。将一个接收者对象绑定于一个动作;调用接收者相应的操作,以实现Execute。
  • 4.Receiver(接收者):请求接收者,根据请求对象的指挥进行不同的反应。知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。
  • 5.Client(客户端):创建一个具体命令对象并设定它的接收者。
5. 优缺点
5.1 优点
  • 1.增加与删除命令不会影响其他类,满足“开闭原则”。
  • 2.可以实现宏命令,即组合多个命令作为一个单独命令来执行。
  • 3.方便实现撤销(Undo)和重做(Redo)操作。
  • 4.可以在现有命令的基础上,增加额外功能,比如日志记录。
5.2 缺点
  • 1.可能导致系统有过多的具体命令类:在命令模式中,每一个请求或操作都被封装成一个具体的命令类。因此,如果系统中有大量的请求或操作,那么就需要设计大量的县体命令类,这可能导致系统的复杂性增加并可能使维护和理解变得困难。
  • 2.可能增加系统的理解难度:由于命令模式涉及到命令的发送者、接收者以及具体的命令类等多个角色,对于初学者或者不熟悉该模式的人来说,可能会觉得理解起来有些困难。
  • 3.可能引发性能问题:在命令模式中,每个命令对象都需要被创建和存储,这可能会消耗一定的系统资源。如果系统中存在大量的命令对象,那么可能会引发性能问题,尤其是在内存使用和处理速度方面。
6. 适用性
  • 1.抽象出待执行的动作以参数化某对象。Command模式是过程语言中的回调(Callback)机制的一个面向对象的替代品。
  • 2.在不同的时刻指定、排列和执行请求。一个Command对象可以有一个与初始请求无关的生存期。如果一个请求的接收者可用一种与地址空间无关的方式表达,那么就可以将负责该请求的命令对象传递给另一个不同的进程并在那儿实现该请求。
  • 3.支持取消操作。Command的Execute操作可在实施操作前将状态存储起来,在取消操作时这个状态用来消除该操作的影响。Command接口必须添加一个Unexecute操作,该操作取消上一次Execute调用的效果。执行的命令被存储在一个历史列表中。可通过向后和向前遍历这一列表并分别调用Unexecute和Execute来实现重数不限的“取消”和“重做”。
  • 4.支持修改日志。这样当系统崩溃时,这些修改可以被重做一遍。在Command 接口中添加装载操作和存储操作,可以用来保持变动的一个一致的修改日志。从崩溃中恢复的过程包括从磁盘中重新读入记录下来的命令并用 Execute 操作重新执行它们。
  • 5.用构建在原语操作上的高层操作构造一个系统。这样一种结构在支持事务(Transaction)的信息系统中很常见。Command 模式提供了对事务进行建模的方法。Commmand 有一个公共接口,使得可以用同一种方式调用所有的事务,同时使用该模式也易于添加新事务以扩展系统。
7.java示例
  • 1.灯类
package com.learning.command.light;

public class Light {
    public void on() {  
        System.out.println("开灯");
    }  
  
    public void off() {  
        System.out.println("关灯");
    }  
}
  • 2.命令接口
package com.learning.command.light;

/**
 * 命令接口
 */
public interface Command {
    void execute();
}
  • 2.关灯实现接口
package com.learning.command.light;

public class LightOffCommand implements Command {
    private Light light;  
  
    public LightOffCommand(Light light) {  
        this.light = light;  
    }  
  
    @Override  
    public void execute() {  
        light.off();  
    }  
}
  • 3.开灯实现接口
package com.learning.command.light;

public class LightOnCommand implements Command {
    private Light light;
    
    public LightOnCommand(Light light) {
        this.light = light;
    }
    @Override
    public void execute() {
        light.on();
    }
}
  • 4.调用者
package com.learning.command.light;

public class Invoker {
    private Command command;
  
    public void setCommand(Command command) {  
        this.command = command;  
    }  
  
    public void executeCommand() {  
        command.execute();  
    }  
}
  • 5.客户端
package com.learning.command.light;

public class Client {
    public static void main(String[] args) {  
        Light light = new Light();  
        Invoker invoker = new Invoker();  
  
        // 创建打开灯的命令,并设置给Invoker
        Command lightOnCommand = new LightOnCommand(light);  
        invoker.setCommand(lightOnCommand);
        invoker.executeCommand();
  
        // 创建关闭灯的命令,并设置给Invoker
        Command lightOffCommand = new LightOffCommand(light);  
        invoker.setCommand(lightOffCommand);  
        invoker.executeCommand();
    }  
}
  • 4.执行结果示例
    【软考】设计模式之命令模式,软考,软考
  • 5.存储命令一起执行
package com.learning.command.light;

import java.util.List;

public class Invoker2 {
    private List<Command> commandList;
  
    public void addCommand(Command command) {
        this.commandList.add(command);
    }  
  
    public void executeCommand() {
        for (Command command : commandList) {
            command.execute();
        }
    }
}
package com.learning.command.light;

public class Client2 {
    public static void main(String[] args) {  
        Light light = new Light();  
        Invoker2 invoker2 = new Invoker2();
  
        // 创建打开灯的命令,并设置给Invoker
        Command lightOnCommand = new LightOnCommand(light);  
        invoker2.addCommand(lightOnCommand);

        // 创建关闭灯的命令,并设置给Invoker
        Command lightOffCommand = new LightOffCommand(light);  
        invoker2.addCommand(lightOffCommand);

        invoker2.executeCommand();
    }  
}

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

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

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

相关文章

  • 软考 系统架构设计师系列知识点之设计模式(11)

    接前一篇文章:软考 系统架构设计师系列知识点之设计模式(10) 所属章节: 老版(第一版)教材 第7章. 设计模式         第2节. 设计模式实例 相关试题 10. 设计模式按照目的可划分三类,其中,创建型模式是对对象实例化过程的抽象。例如()模式确保一个类只有一个

    2024年02月07日
    浏览(68)
  • 软考知识点——常见算法策略、设计模式、常见排序算法

    目录 一、常见算法策略 二、设计模式 1.设计模式分类 2.创建型设计模式应用场景 3.结构型设计模式应用场景  4.行为型设计模式应用场景 三、常见排序算法 算法名称 关键点 特征 典型问题 分治法 递归技术 把一个问题拆分成多个小模块的相同子问题,一般可用递归解决。

    2024年02月07日
    浏览(39)
  • 软考:中级软件设计师:数据库模式、ER模型

    提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 (1)自己的科研经历, 科研内容 ,学习的相关领域知识,要熟悉熟透了 (2)自己的实习经历,做了 什

    2024年02月12日
    浏览(52)
  • 软考高级系统架构设计师(九) 作文模板-论设计模式及其应用(未完待续)

    目录 掌握的知识点 创建型 结构型 行为型 设计模式分为哪3类   每一类包含哪些具体的设计模式 创建型 创建型模式是 对对象实例化过程的抽象,他通过抽象类所定义的接口,封装了系统中对象如何创建、组合等信息 。   创建型模式主要用于创建对象,做到了软件模块跟对

    2024年02月12日
    浏览(52)
  • 软考高级系统架构设计师系列论文八十三:论软件设计模式的应用

    软考高级系统架构设计师系列之:面向构件的软件设计,构件平台与典型架构

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

    命令模式(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日
    浏览(40)
  • 设计模式之命令模式

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

    2024年02月20日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包