当前位置: 首页 > 编程笔记 >

Design patterns Java中的命令模式示例

巫马曜文
2023-03-14
本文向大家介绍Design patterns Java中的命令模式示例,包括了Design patterns Java中的命令模式示例的使用技巧和注意事项,需要的朋友参考一下

示例

维基百科定义:

命令模式是一种行为设计模式,其中的对象用于封装以后执行动作或触发事件所需的所有信息。

来自factory的UML图:

基本组件和工作流程:

  1. Command 声明抽象命令的接口,例如 execute()

  2. Receiver 知道如何执行特定命令

  3. Invoker持有ConcreteCommand,必须执行

  4. Client创建ConcreteCommand并分配Receiver

  5. ConcreteCommand定义Command和之间的绑定Receiver

通过这种方式,命令模式通过Invoker发件人(客户端)与Receiver解耦。调用具有的完整的知识命令要执行,并命令知道哪些接收器被调用执行特定操作。

程式码片段:

interface Command {
    void execute();
}
class Receiver {
    public void switchOn(){
        System.out.println("开启:"+this.getClass().getSimpleName());
    }
}
class OnCommand implements Command{
    private Receiver receiver;

    public OnCommand(Receiver receiver){
       this.receiver= receiver;
    }
    public void execute(){
        receiver.switchOn();
    }
}
class Invoker {
    private Command command;
  
    public Invoker(Command command){
       this.command= command;
    }
    public void execute(){
        this.command.execute();
    }
}

class TV extends Receiver{
    
    public String toString(){
        return this.getClass().getSimpleName();
    }
}
class DVDPlayer extends Receiver{
    
    public String toString(){
        return this.getClass().getSimpleName();
    }
}

public class CommandDemoEx{
    public static void main(String args[]){
        // 在具有相同调用者的电视上命令 
        Receiver receiver = new TV();
        Command onCommand = new OnCommand(receiver);
        Invoker invoker = new Invoker(onCommand);
        invoker.execute();
        
        // 具有相同调用程序的DVDPlayer的命令 
        receiver = new DVDPlayer();
        onCommand = new OnCommand(receiver);
        invoker = new Invoker(onCommand);
        invoker.execute();            
    }
}

输出:

开启:TV
开启:DVDPlayer

说明:

在这个例子中

  1. 命令界面定义execute()方法。

  2. OnCommandConcreteCommand,它实现execute()方法。

  3. 接收器是基类。

  4. TVDVDPlayer是两种类型的Receiver,它们像OnCommand一样传递给ConcreteCommand。

  5. 调用者包含Command。这是将Sender与Receiver分离的关键。

  6. 调用器接收按需- >它调用接收器(TV)到执行此命令。

通过使用Invoker,您可以打开TV和DVDPlayer。如果扩展此程序,则也将同时关闭TV和DVDPlayer。

关键用例:

  1. 实现回调机制

  2. 实现撤消和重做功能

  3. 维护命令历史记录

 类似资料:
  • 主要内容:介绍,实现,Order.java,Stock.java,BuyStock.java,SellStock.java,Broker.java,CommandPatternDemo.java命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 介绍 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 主要解决

  • 命令模式 亦称:动作、事务、Action、Transaction、Command 意图 命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。 问题 假如你正在开发一款新的文字编辑器, 当前的任务是创建一个包含多个按钮的工具栏, 并让每个按钮对应编辑器的不同操作。 你创建

  • 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 介绍 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记

  • 问题 你需要让另一个对象处理你自己的可执行的代码。 解决方案 使用 Command pattern 传递函数的引用。 # Using a private variable to simulate external scripts or modules incrementers = (() -> privateVar = 0 singleIncrementer = () ->

  • 简介 在面向对象程式设计的范畴中,命令模式是一种设计模式,它尝试以物件来代表实际行动。命令物件可以把行动(action) 及其参数封装起来,于是这些行动可以被: 重复多次 取消(如果该物件有实作的话) 取消后又再重做 这些都是现代大型应用程序所必须的功能,即“复原”及“重复”。除此之外,可以用命令模式来实作的功能例子还有: 交易行为 进度列 精灵 使用者界面按钮及功能表项目 执行绪 pool 宏收

  • 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 介绍 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。 主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记