美文网首页一步一坑
设计模式- 命令模式(Command Pattern)

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

作者: 易兒善 | 来源:发表于2019-05-04 07:30 被阅读0次

    定义

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

    C#例子

        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种设计模式

    相关文章

      网友评论

        本文标题:设计模式- 命令模式(Command Pattern)

        本文链接:https://www.haomeiwen.com/subject/vyadnqtx.html