设计模式学习笔记——命令模式(Command)
1.特点:将请求发送者与具体实现者解耦,可对请求排列、取消、重做,支持事务。(多请求,单处理)
2.概念:属于对象的行为模式【GOF95】。命令模式又称为行动(Action)模式或交易(Transaction)模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
3.类图:

4、程序实现:
/// <summary>
/// 接收者类,知道如何实施与执行一个请求相关的操作,任何类都可能作为一个接收者。
/// </summary>
public class Receiver
{
/// <summary>
/// 真正的命令实现
/// </summary>
public void Action()
{
Console.WriteLine("Execute request!");
}
}
/// <summary>
/// 抽象命令类,用来声明执行操作的接口
/// </summary>
public interface ICommand
{
void Execute();
}
/// <summary>
/// 具体命令类,实现具体命令。
/// </summary>
public class ConcereteCommand : ICommand
{
// 具体命令类包含有一个接收者,将这个接收者对象绑定于一个动作
private Receiver receiver;
public ConcereteCommand(Receiver receiver)
{
this.receiver = receiver;
}
/// <summary>
/// 说这个实现是“虚”的,因为它是通过调用接收者相应的操作来实现Execute的
/// </summary>
public void Execute()
{
receiver.Action();
}
}
/// <summary>
/// 调度类,要求该命令执行这个请求
/// </summary>
public class Invoker
{
private ICommand command;
/// <summary>
/// 设置命令
/// </summary>
/// <param name="command"></param>
public void SetCommand(ICommand command)
{
this.command = command;
}
/// <summary>
/// 执行命令
/// </summary>
public void ExecuteCommand()
{
command.Execute();
}
}
class Program
{
static void Main(string[] args)
{
Receiver receiver = new Receiver();
ICommand command = new ConcereteCommand(receiver);
Invoker invoker = new Invoker();
invoker.SetCommand(command);
invoker.ExecuteCommand();
Console.Read();
}
}

浙公网安备 33010602011771号