设计模式——命令模式

命令(Command)模式:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销操作。



Command:声明执行操作的接口;
ConcreteCommand:将一个接受者对象绑定一个动作,调用接受者相应的操作,以实现Execute;
Receiver:接受者,具体实施与执行一个请求;
Invoker:要求该命令执行这个请求;
Client:创建一个具体命令对象并设定它的接受者;

适用性:
(1)Command模式是回调机制的一个面向对象的替代品;
(2)在不同的时刻有不同的请求;
(3)需要支持取消操作;
(4)需要记录日志;

优点:
(1)将调用操作的对象与知道如何实现该操作的对象解耦;
(2)Command对象可以被扩展;
(3)可以将多个命令封装成复合命令,复合命令可以使用组合模式;

缺点:
若命令过多,会造成Command子类过多;

实现:
(1)若支持撤销与重做功能,则ConcreteCommand类需要保存额外信息,包括接受者对象、参数、执行命令前的数据,这里可以使用备忘录模式。还需要存储执行命令的历史列表;
(2)对不能撤销、不需要参数的命令,可以使用模板来实现,避免每个动作可接受者都创建一个Command子类;
(3)Receiver接受者可以是多个,要有共同的抽象类;
(4)命令模式可以结合责任链模式,实现命令族解析任务;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值