Design Pattern - Command Pattern

概述

Command Pattern,即命令模式。

命令模式是一种行为型设计模式。将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,并且能实现可撤销操作。

每一个命令都是一个操作。请求的一方要求执行一个操作。接收的一方接收该请求执行操作。解耦了请求方和接收方。请求方只需请求执行命令,不用关心命令如何被接收、如何被执行,是否被执行等。

本质是对命令的请求与处理解耦
Design Pattern - Command Pattern_第1张图片

结构

Design Pattern - Command Pattern_第2张图片

其实,命令模式的结构核心就是Command接口,在它的具体实现类,加入Receiver(也就是实际执行命令的对象)。Command接口的加入,使得Invoker和Receiver不用直接交互,而是借助Command接口间接交互,从而解耦Invoker和Receiver。

适合的应用场景

  • 现实语义中带有“命令”的操作(比如shell命令,命令菜单等)。

  • 需要抽象出等待执行的行为(比如撤销、恢复),java中的Runnable接口即是如此。

  • 同其他对象一样, 命令也可以实现序列化 (序列化的意思是转化为字符串), 从而能方便地写入文件或数据库中。 一段时间后, 该字符串可被恢复成为最初的命令对象。 因此, 你可以延迟或计划命令的执行。 但其功能远不止如此! 使用同样的方式, 你还可以将命令放入队列记录命令或者通过网络发送命令

  • 请求调用者与处理者解耦,使得两者不直接交互。

  • 需要支持命令宏(即组合命令操作)。

优缺点

Design Pattern - Command Pattern_第3张图片

代码演示

Design Pattern - Command Pattern_第4张图片

Design Pattern - Command Pattern_第5张图片

Design Pattern - Command Pattern_第6张图片

Design Pattern - Command Pattern_第7张图片

Design Pattern - Command Pattern_第8张图片

代码写法不是固定不变的,关键的是如何将请求抽象出ICommand接口,ICommand接口如何与命令的请求方绑定,在ICommand的具体实现类如何完成与命令的处理者绑定。

你可能感兴趣的:(Design,Pattern)