设计模式-命令模式

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

命令模式

角色

  • 接受者(Receiver)
    请求的实际作用对象
  • 抽象命令(Command)
    声明了执行请求的execute方法
  • 具体命令(ConcreteCommand)
    调用实际操作对象,实现execute
  • 调用者(Invoker)
    调用命令请求发送者

案例

功能键绑定

比如遥控器的功能键,现在想要实现为功能可以自定义绑定事件,请使用命令模式实现

WindowsHelper:接收者

/**
 * Receiver
 */
public class WindowHelper {
    public void min(){
        System.out.println("窗口最小化");
    }

    public void exit(){
        System.out.println("窗口退出");
    }
}

Command:抽象命令

/**
 * Command
 */
public interface Command {
    public void execute();
}

MinCmd:窗口退出命令

/**
 * ConcreteCommand:ExitCmd
 */
public class ExitCmd implements Command{
    private WindowHelper windowHelper;

    public ExitCmd() {
        this.windowHelper = new WindowHelper();
    }

    @Override
    public void execute() {
        this.windowHelper.exit();
    }
}

ExitCmd:窗口最小化命令

/**
 * ConcreteCommand:MinCmd
 */
public class MinCmd implements Command{
    private WindowHelper windowHelper;

    public MinCmd() {
        this.windowHelper = new WindowHelper();
    }

    @Override
    public void execute() {
        this.windowHelper.min();
    }
}

FxBtn:功能键Invoker

/**
 * Invoker
 */
public class FxBtn {
    private Command command;

    private String name;

    public FxBtn(String name) {
        this.name = name;
    }

    public void onClick() {
        this.command.execute();
    }

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

Main

public class Main {
    public static void main(String... args){
        /**
         * 创建两个功能键
         */
        FxBtn btn1 = new FxBtn("minilize");
        FxBtn btn2 = new FxBtn("Exit");
        /**
         * 创建两个命令
         */
        Command cmd1 = new MinCmd();
        Command cmd2 = new ExitCmd();
        /**
         * 为功能键绑定命令
         */
        btn1.bindCommand(cmd1);
        btn2.bindCommand(cmd2);

        btn1.onClick();
        btn2.onClick();
        /**
         * 交换一下
         */
        btn1.bindCommand(cmd2);
        btn2.bindCommand(cmd1);

        btn1.onClick();
        btn2.onClick();
    }
}

Output:

窗口最小化
窗口退出
窗口退出
窗口最小化

命令模式优缺点

优点:

  1. 降低了系统耦合度,请求者和目标对象之间不直接引用
  2. 容易拓展新命令,符合开闭原则
  3. 可以配合队列实现命令批处理、宏命令
  4. 容易实现命令的 Undo 和 Redo 操作

缺点:文章来源地址https://www.toymoban.com/news/detail-485556.html

  1. 可能导致系统具有过多的命令类。

应用场景

  1. 需要将请求者和接收者解耦
  2. 分时请求
  3. 需要实现 Redo 和 Undo
  4. 命令组成宏命令

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

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

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

相关文章

  • 设计模式(19)命令模式

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

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

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

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

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

    2024年04月16日
    浏览(31)
  • 设计模式之命令模式

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

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

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

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

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

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

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

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

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

    2024年04月27日
    浏览(25)
  • Java 设计模式——命令模式

    (1)日常生活中,我们出去吃饭都会遇到下面的场景: (2)命令模式是一种行为型设计模式, 它通过将请求封装为一个对象,使得可以灵活地参数化客户端对象,同时也能够将请求队列或记录日志、撤销操作等操作进行处理 。命令模式的作用在于 解耦请求发送者和接收者

    2024年02月06日
    浏览(23)
  • 设计模式之命令模式笔记

    记录下学习设计模式-命令模式的写法。JDK使用版本为1.8版本。 意图 :将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 结构 : 其中: Command声明执行操作的接口。 ConcreteCommand将一个接收者对象

    2024年02月11日
    浏览(26)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包