命令(Command)模式:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销操作。
Command:声明执行操作的接口;
ConcreteCommand:将一个接受者对象绑定一个动作,调用接受者相应的操作,以实现Execute;
Receiver:接受者,具体实施与执行一个请求;
Invoker:要求该命令执行这个请求;
Client:创建一个具体命令对象并设定它的接受者;
适用性:
(1)Command模式是回调机制的一个面向对象的替代品;
(2)在不同的时刻有不同的请求;
(3)需要支持取消操作;
(4)需要记录日志;
优点:
(1)将调用操作的对象与知道如何实现该操作的对象解耦;
(2)Command对象可以被扩展;
(3)可以将多个命令封装成复合命令,复合命令可以使用组合模式;
缺点:
若命令过多,会造成Command子类过多;
实现:
(1)若支持撤销与重做功能,则ConcreteCommand类需要保存额外信息,包括接受者对象、参数、执行命令前的数据,这里可以使用备忘录模式。还需要存储执行命令的历史列表;
(2)对不能撤销、不需要参数的命令,可以使用模板来实现,避免每个动作可接受者都创建一个Command子类;
(3)Receiver接受者可以是多个,要有共同的抽象类;
(4)命令模式可以结合责任链模式,实现命令族解析任务;
转载请注明原文地址: https://ju.6miu.com/read-660965.html