command模式学习笔记


一、command模式要点

command模式是将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化。

核心目的:有时候必须向某对象提交请求,但并不想知道关于被请求者的信息(将请求本身与被请求者解耦)

模式的适用性:
当有如下需求时,可使用command模式:
1.由于command模式是回调机制的一个面向对象的代替品,故需要使用回调机制的场景都可以使用
2.支持在不同时刻,动态指定、排列、取消和执行请求

模式结构
在这里插入图片描述
模式参与者:
Command类:抽象类,提供一个接口标准
ConcreteCommand类:具体类,即基于Command类提供的接口标准进行实现的具体类
Invoker类:命令的集合(可选)
clinet:创建一个具体命令对象,并设定它的接收站
Receiver类:命令的接收者,即实际动作的完成者

二、模式举例

1.实例说明

在这里插入图片描述
Command类:抽象类,提供一个接口标准
PasteCommand类:ConcreteCommand类
Document类:Receiver类

2.C++代码实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
C++代码运行结果
在这里插入图片描述

总结

该模式的优点:

类间解耦:调用者角色与接收者角色之间没有任何依赖关系,调用者实现功能时只需调用Command 抽象类的execute方法就可以,不需要了解到底是哪个接收者执行。
可扩展性:Command的子类可以非常容易地扩展,而调用者Invoker和高层次的模块Client不产生严 重的代码耦合
命令模式结合其他模式会更优秀:命令模式可以结合责任链模式,实现命令族解析任务;结合模板方法模式,则可以减少 Command子类的膨胀问题。

该模式的缺点:

命令模式也是有缺点的,请看Command的子类:如果有N个命令,问题就出来 了,Command的子类就可不是几个,而是N个,这个类膨胀得非常大,这个就需要读者在项 目中慎重考虑使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值