目录
命令模式
引言
命令模式将请求发送者和请求接收者解耦,请求发送者通过命令对象间引用接收者,使得系统具有更好的灵活性,可以在不修改现有系统源代码的情况下将相同的发送者对应不同的接收者,也可以将多个命令组合成宏命令,可以再命令类中提供用来撤销请求的方法。
命令模式重要等级★★★★☆ 桥接模式难度等级★★★★☆
定义
英文定义:“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; }
}<