浅谈设计模式之命令模式

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

关于这个命令我们用一个简单的例子来说明,比如键盘的指令,不同的按键按下就会执行不同的命令。在这里我们用键盘按键发出命令,电脑接收这些命令,然后执行不同的操作,也就是完成了一系列的命令指示。

UML图如下:

列表内容

//声明执行操作的接口
abstract class Command
{
    protected Receiver receiver;
    public Command(Receiver receiver)
    {
        this.receiver = receiver;
    }
    abstract public void Execute();
}

//知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者,只要它能够实现命令要求实现的相应功能。
class Receiver 
{
    public void Action()
    {
        Print("执行相关请求");
    }
}

//将一个接受者对象绑定于一个动作,调用接受者相应的操作
class ConcreteCommand : Command
{
    public ConcreteCommand(Receiver receiver):base(receiver){}
    public override void Excute()
    {
        receiver.Action();
    }
}

//要求该命令执行这个请求
class Invoker
{
    Command command;
    //命令如果有多个的情况,这样也就可以在执行之前撤销命令了
    //List<Command> commands = new List<Command>();
    public void SetCommond(Command command)
    {
        this.command = command;
    }
    public void ExecuteCommand()
    {
        command.Execute();
    }
}

//测试
static void Main(sting[] args)
{
    Receiver r = new Receiver();
    Command c = new ConcreteCommnd(r);
    Invoker i = new Invoker();

    i.SetCommand(c);
    i.ExecuteCommand();
    Console.Read();
}

命令模式的优点总结如下:
1. 它能比较容易地设计一个命令队列
2. 在需要的情况下,可以较容易的将命令记入日志
3. 允许接收请求的一方决定是否否决请求
4. 可以很容易地实现对请求的撤销和重做
5. 容易增加新的具体命令类,当然这个也容易成为它的缺点==
6. 可以把请求一个操作对象与知道怎么执行一个操作的对象分割开,实现解耦。

参考书籍:《大话设计模式》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值