zoukankan      html  css  js  c++  java
  • 设计模式学习笔记——命令模式(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();
            }
        }
    

      

  • 相关阅读:
    redis深度理解底层锁原理
    深度完整的了解MySQL锁
    今天的文章很不一般
    利用h5来进行定位当前位置
    workerman(环境+初识)
    Nginx(防止压力测试的恶意攻击)
    Java Web框架——自己动手实现一个简化版的Spring IOC框架
    设计模式——策略模式
    数据库——深入理解MySQL事务
    缓存——Redis和Memcache的对比
  • 原文地址:https://www.cnblogs.com/ice-baili/p/4710400.html
Copyright © 2011-2022 走看看