命令 结构_命令模式的结构和效果

结构

e4bcb3e3c83392ba92a3ab14148af089.png

参与者

• Command

—声明执行操作的Execute接口。在实际的开发中也可以有别的选择,例如do/undo等。

• ConcreteCommand ( PasteCommand,OpenCommand )

— 具象Command类一般可以管理一个接收者实例作为操作的对象。

— 实现Execute操作。

• Client ( Appliction )

—创建一个具体命令对象并设定它的接收者。在实例的开发中,创建Command实例的Client和设定接收者的Client实例不一定是同一个。

• Invoker ( MenuItem )

—要求该命令对象执行这个请求。

• Receiver ( Document,Application )

—Execute操作的对象。接收者可以是任何类的实例。不同的Command可以有不同的接收者,不同的Command类可以处理不同类型、不同数量的接收者。

5ab65886cf3f2d797460ae3924d0d4f1.png

协作

• Client创建一个ConcreteCommand对象并指定它的Receiver对象。

• 某Invoker对象接收该ConcreteCommand对象。

• Invoker调用ConcreteCommand对象的执行操作。

•ConcreteCommand对象调用Receiver的一些操作以执行请求。

0db538a4988d83c0b52366286759d239.png

效果

1)Command模式可以将决定动作内容和执行动作分离,使二者可以在不同的时间和空间中进行。

2)通过扩展Command类的派生类,可以在不影响Invoker的情况下修改Invoker的动作。

3)可以使用简单命令进行组合成为一个复合命令。

4)增加新的Command对Client造成的负担也很小。

一句话,Command命令模式使选择处理的内容和决定处理的对象以及执行这个处理这三个动作可以分别进行。

注:文中类图来自《设计模式》一书。


觉得本文有帮助?请分享给更多人。

关注【面向对象思考】,轻松学习每一天!

有任何疑问,欢迎留言提问或讨论。

面向对象设计,面向对象编程,面向对象思考!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值