设计模式学习笔记-命令模式

概述:                                                                                                      

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

适用场合:                                                                                                

1.抽象出待执行的动作以参数化某对象。

2.在不同的时刻指定、排列和执行请求。

3.支持取消操作。

4.支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍。

5.用构建在原语操作上的高层操作构造一个系统。

类图:                                                                                                      

(今天的类图的接口画的规范了,以前的抽空再改过来,呵呵)

代码示例:                                                                                                

1.声明命令接口

复制代码
    /// <summary>
/// 用来声明执行操作的接口
/// </summary>
abstract class Command
{
protected Receiver receiver;

public Command(Receiver receiver)
{
this.receiver = receiver;
}
abstract public void Excute();
}
复制代码

2.实现命令操作

复制代码
    /// <summary>
/// 将接受者对象绑定一个动作,调用接受者相应的操作,以实现Excute
/// </summary>
class ConcreteCommand:Command
{
public ConcreteCommand(Receiver receiver):base(receiver) { }

public override void Excute()
{
receiver.Action();
}
}
复制代码

3.给命令发出通知,执行请求

复制代码
    /// <summary>
/// 要求该命令执行这个请求
/// </summary>
class Invoker
{
private Command command;

public void SetCommand(Command command)
{
this.command = command;
}
public void ExcuteCommand()
{
command.Excute();
}
}
复制代码

4.接受者

复制代码
    /// <summary>
/// 如何实施和执行一个与请求相关的操作,任何类都可能作为一个接受者.
/// </summary>
class Receiver
{
public void Action()
{
Console.WriteLine(
"执行请求");
}
}
复制代码

5.客户端调用

复制代码
        /// <summary>
/// 测试命令模式
/// </summary>
static void TestCommand()
{
Receiver r
= new Receiver();
Command c
= new ConcreteCommand(r);
Invoker i
= new Invoker();
i.SetCommand(c);
i.ExcuteCommand();
Console.Read();
}
复制代码

小结:                                                                                                         

命令模式有点晕乎,是为了实现特定的操作而设计的,具体例子,再找找。

posted @   叶鹏  阅读(819)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示