最病 E Applicability 口抽象出待执行的动作以参数化某对象,可以代 替“回调”函数 口在不同的时刻指定、排列和执行请求 口支持取消操作。 Execute操作可以在实施前将状 态存储起来 口支持修改日志,这样当系统崩溃时,这些修改 可以被重做一遍 口用构建在原语操作上的高层操作构造一个系统, 支持“事务” 思考题:回忆一下 Java callback机制! Institute of Computer Software 2021/215 Nanjing University
Applicability 抽象出待执行的动作以参数化某对象,可以代 替“回调”函数 在不同的时刻指定、排列和执行请求 支持取消操作。Execute操作可以在实施前将状 态存储起来 支持修改日志,这样当系统崩溃时,这些修改 可以被重做一遍 用构建在原语操作上的高层操作构造一个系统, 支持“事务” 2021/2/5 Institute of Computer Software Nanjing University 21 思考题:回忆一下Java Callback机制!
最病 o Structure Client Invoker h Command Execute receiver Receiver Concrete Comand Action Executeo o---------Receiver->Actiono state Institute of Computer Software 2021/215 Nanjing University
Structure 2021/2/5 Institute of Computer Software Nanjing University 22
最病 A Participants 口 Command 口声明执行操作的接口 口 Concrete command 口将一个接收者对象绑定于一个动作 口调用接收者相应的操作以实现 Execute a Client 口创建一个具体命令对象并设定它的接收者 口| nvoker 口要求该命令执行这个请求 Receiver 口知道如何实施与执行一个请求相关的操作。任何类都可能作 为一个接收者 Institute of Computer Software 2021/215 Nanjing University
Participants Command 声明执行操作的接口 ConcreteCommand 将一个接收者对象绑定于一个动作 调用接收者相应的操作以实现Execute Client 创建一个具体命令对象并设定它的接收者 Invoker 要求该命令执行这个请求 Receiver 知道如何实施与执行一个请求相关的操作。任何类都可能作 为一个接收者 2021/2/5 Institute of Computer Software Nanjing University 23
最病 Collaboration rEceiver cLient a Command anInyoker new Command(rEceiver Store Command(command) Action0 Execute Decouple anlnvoker and rEceiver by command Sample code Institute of Computer Software 2021/215 Nanjing University
Collaboration 2021/2/5 Institute of Computer Software Nanjing University 24 Decouple anInvoker and aReceiver by aCommand Sample Code
最病 o Consequences 口本质:封装请求! □将调用操作的对象与知道如何实现该操作的对象解耦 口 Command是 first class object它们可像其它对象一样 被操纵和扩展 口可将多个 Command装配成一个复合 Command,一般说 来,复合 Command是 Composite模式的一个实例 口增加新的 Command很容易,无需改变已有的类 口缺点:会导致某些系统有过多的具体命令类 Institute of Computer Software 2021/215 Nanjing University
Consequences 本质:封装请求! 将调用操作的对象与知道如何实现该操作的对象解耦 Command是first class object。它们可像其它对象一样 被操纵和扩展 可将多个Command装配成一个复合Command,一般说 来,复合Command是Composite模式的一个实例 增加新的Command很容易,无需改变已有的类 缺点:会导致某些系统有过多的具体命令类 2021/2/5 Institute of Computer Software Nanjing University 25