前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式- 命令模式(Command Pattern)

设计模式- 命令模式(Command Pattern)

作者头像
易兒善
发布2019-05-14 16:40:48
4490
发布2019-05-14 16:40:48
举报
文章被收录于专栏:挖坑填坑挖坑填坑

定义

命令模式的目的是解除命令发出者和接收者之间的紧密耦合关系,使二者相对独立,有利于程序的并行开发和代码的维护。命令模式的核心思想是将请求封装为一个对象,将其作为命令发起者和接收者的中介,而抽象出来的命令对象又使得能够对一系列请求进行操作,如对请求进行排队,记录请求日志以及支持可撤销的操作等。

C#例子

代码语言:javascript
复制
    public abstract class Command
    {
        public abstract void Excute(Receiver receiver);
    }

    public class CreateOrderCommand : Command
    {
        public override void Excute(Receiver receiver)
        {
            Console.WriteLine("创建单据完成!");
        }
    }
    public class ChangeStockCommand : Command
    {
        public override void Excute(Receiver receiver)
        {
            Console.WriteLine("扣减库存完成!");
        }
    }

    public class Receiver
    {
    }

    public class Invoker
    {
        private IList<Command> _commands = new List<Command>();

        public Invoker AddCommand(Command command) {
            _commands.Add(command);
            return this;
        }

        public void Excute(Receiver receiver) {
            foreach (var command in _commands) {
                command.Excute(receiver);
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Receiver receiver = new Receiver();
            new Invoker()
                .AddCommand(new CreateOrderCommand())
                .AddCommand(new ChangeStockCommand())
                .Excute(receiver);
        }
    }

命令模式参与者:

  • Command:命令抽象类,声明一个执行操作的接口Execute,该抽象类并不实现这个接口,所有的具体命令都继承自命令抽象类。
  • *Command:Command的实现类,定义一个接收者对象与动作之间的请求绑定,调用Receiver的操作,实现Execute方法
  • Invoker:命令的接收者,将命令请求传递给相应的命令对象,每个*Command都是一个Invoker的成员
  • Receiver:命令的接收者,知道如何实施与执行一个请求相关的操作

命令模式适用情形:

  • 将用户界面和行为分离,使两者的开发可以并行不悖。
  • 在需要指定、排列和执行一系列请求的情况下,适用命令模式。
  • 支持修改日志。

命令模式优点:

  • 命令模式将调用操作对象和知道如何实现该操作对象的解耦。
  • 在Command要增加新的处理操作对象很容易,可以通过创建新的继承自Command的子类来实现。
  • 命令模式可以和Memento模式结合使用,支持取消的操作。
  • 支持日志、请求队列和复合命令。

其他

源码地址

dotnet-design-patterns

其他设计模式

23种设计模式

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.05.04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义
  • C#例子
  • 命令模式参与者:
  • 命令模式适用情形:
  • 命令模式优点:
  • 其他
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档