命令模式1
需积分: 0 155 浏览量
更新于2022-08-08
收藏 15KB DOCX 举报
命令模式是一种行为设计模式,它的主要作用是将一个请求封装为一个对象,使得发送者和接收者解耦,使得请求本身成为一个对象。这样做的好处是可以对请求进行参数化,可以将请求排队、记录请求日志,甚至支持撤销或重做操作。
在JavaScript中,我们可以看到一个简单的例子,即车辆购买程序。原本的`CarManager`对象包含了三个方法:`requestInfo`、`buyVehicle`和`arrangeViewing`,它们分别对应了查询车辆信息、购买车辆和安排看车的业务逻辑。这些方法直接在`CarManager`对象上执行,这导致了对象之间紧密的耦合。
为了遵循命令模式,我们需要将这些操作封装成独立的命令对象。我们创建了一个`execute`方法在`CarManager`对象上,它接收一个包含`commandType`、`model`和`carID`的参数对象。`execute`方法根据`commandType`动态调用相应的操作,实现了对原始方法的间接调用,降低了对象之间的耦合度。
改造后的`CarManager.execute`方法如下:
```javascript
CarManager.execute = function (command) {
return CarManager[command.request](command.model, command.carID);
};
```
通过这种方式,我们可以用以下方式执行各种操作:
```javascript
CarManager.execute({ request: "arrangeViewing", model: 'Ferrari', carID: '145523' });
CarManager.execute({ request: "requestInfo", model: 'Ford Mondeo', carID: '543434' });
// ... 其他命令
```
命令模式的其他优点包括:
1. **可扩展性**:添加新的命令只需要创建新的具体命令类,而无需修改原有代码。
2. **可撤销操作**:可以通过维护一个命令的历史记录,实现撤销或重做功能。
3. **易于设计命令队列**:可以将多个命令放入队列中顺序执行,或者异步执行。
4. **灵活性**:接收者可以根据需要决定何时执行命令,甚至不执行。
然而,命令模式并非总是必要的。在敏捷开发的原则下,我们应当避免过度设计。如果在早期阶段无法确定需求,不应该盲目地引入命令模式。只有当确实有需求,比如需要记录操作历史、支持撤销/重做或命令调度时,才考虑使用命令模式。实际上,随着需求的明确,我们可以在后期通过重构来引入命令模式,而不会对系统造成太大影响。
![avatar](https://profile-avatar.csdnimg.cn/fd4192273b5746dca81762c73c67d684_weixin_35827671.jpg!1)
shashashalalala
- 粉丝: 28
- 资源: 285
最新资源
- 基于TypeScript的luyinji录音机设计源码
- (源码)基于C语言和MPI框架的NBody问题求解系统.zip
- 昆仑通态控温程序:触摸屏直接通讯仪表,无需PLC,MCGS通讯连接10块仪表,精准控温高效管理,昆仑通态控温程序:触摸屏直接通讯仪表,无需PLC,MCGS通讯连接十块仪表,昆仑通态控温程序,MCGS通
- 基于PHP和JavaScript的OpenFlights航班信息地图设计源码
- (源码)基于Spring Boot和Vue的权限管理系统.zip
- COMSOL仿真揭示石墨烯临界耦合光吸收特性:费米能级调控下的光学性能探究,COMSOL仿真揭示石墨烯临界耦合光吸收特性:费米能级调控下的光学性能探究,COMSOL 准 BIC控制石墨烯临界耦合光吸收
- 深入解析comsol电弧放电现象:蒸汽影响下的电弧行为与特性,探索comsol电弧放电现象:蒸汽作用下的放电特性研究,comsol电弧放电 考虑蒸汽 ,comsol电弧放电; 蒸汽电弧放电; 蒸汽与电
- (源码)基于Arduino的避障机器人.zip
- 基于TypeScript和JavaScript的基因组可视化设计源码
- 基于TypeScript的快递配送司机行程时间计算器设计源码
- 基于Vue2的图书馆前端LMS设计源码
- 基于FPGA的自适应滤波器设计及LMS、NLMS、RLS算法实现,包含FIR IIR滤波器和FxLMS分数阶技术,2023年H题解析,基于FPGA的自适应滤波器设计与实现:LMS、NLMS、RLS算法
- (源码)基于电路设计项目的完整解决方案.zip
- 基于三菱PLC与组态王的三层电梯智能控制设计程序集:梯形图程序、接线图与组态画面全解析,基于三菱PLC与组态王的三层电梯智能控制设计程序集:含梯形图、接线图、IO分配及组态画面,基于三菱PLC和组态王
- 基于MATLAB的混合滤波器设计:模拟与数字滤波器应用详解,MATLAB平台下的模拟与数字滤波器设计:涵盖IIR、FIR及巴特沃斯、切比雪夫四大类型滤波器的研究与实践,基于matlab的模拟滤波器和数
- 《煤矿开挖区三维渗流仿真及其应力场计算分析模型研究》,《煤矿开挖区三维渗流仿真及其应力场计算分析模型研究》,煤矿开挖区的三维渗流仿真 煤矿开挖区模型 计算了渗流速度场以及结构的应力场 ,三维渗流仿真