命令模式学习总结

本文深入探讨命令模式,介绍了如何通过命令模式将请求发送者与接收者解耦,详细阐述了模式结构、实例分析及代码实现,包括撤销操作和宏命令的扩展。通过命令模式,系统具有更好的灵活性和可扩展性,可以轻松实现请求的参数化、队列化以及撤销操作。
摘要由CSDN通过智能技术生成

目录

命令模式

引言

定义

模式结构图

模式分析

实例

实例描述

代码实现

模式扩展

命令模式实现撤销操作

宏命令

总结

模式优点

模式缺点


命令模式

 

引言

命令模式将请求发送者和请求接收者解耦,请求发送者通过命令对象间引用接收者,使得系统具有更好的灵活性,可以在不修改现有系统源代码的情况下将相同的发送者对应不同的接收者,也可以将多个命令组合成宏命令,可以再命令类中提供用来撤销请求的方法。

命令模式重要等级★★★★☆          桥接模式难度等级★★★★☆

定义

英文定义:“Encapsulate a request as an object,thereby letting you parameterize clients with diffent requests,queue or log requests, and support undoable operations”。

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

模式结构图

模式分析

如图所示,命令模式包括以下角色:

1.Command(抽象命令类)

抽象命令类通常是个接口,在其中声明了用于执行请求的Execute()等方法,通过这些方法可以调用接收者的相关操作。

2.ConcreteCommand(具体命令类)

具体命令类实现了抽象命令类中声明的方法。

3.Invoker(调用者)

调用者即请求的发送者,又称请求者,它通过命令对象来执行请求。

4.Receiver(接收者)

接收者执行与请求相关的操作,具体实现对请求的业务处理。

实例

实例描述

现在数据库有用户表(ID,Name,Birthday)和地址表(Name,Description),用命令模式设计增删改功能。其中具体的数据库操作不实现,只显示结果即可(写数据库处理代码的话篇幅过大)。

代码实现

1)实体类:首先定义实体类型User和Address,代码如下:

User

public class User
{
    private string id;

    private string userName;

    private DateTime birthday;

    private Address currentLocation;

    public string Id { get => id; set => id = value; }
    public string UserName { get => userName; set => userName = value; }
    public DateTime Birthday { get => birthday; set => birthday = value; }
    public Address CurrentLocation 
    { get => currentLocation; set => currentLocation = value; }
}<
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值