• 命令(Command)模式


    命令(Command)模式:命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象

    /*
    * 客户(Client)角色:创建了一个具体命令(ConcreteCommand)对象并确定其接收者。
    * 命令(Command)角色:声明了一个给所有具体命令类的抽象接口。这是一个抽象角色。
    * 具体命令(ConcreteCommand)角色:定义一个接受者和行为之间的弱耦合;实现Execute()方法,负责调用接收考的相应操作。Execute()方法通常叫做执方法。
    * 请求者(Invoker)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。
    * 接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。
    */  

    命令(Command) 需要交给 接收者(Receiver) 来执行, 因此在构造命令的时候需要知道 谁是接受者

            protected Receiver receiver; 
            // 构造函数
            public Command(Receiver receiver)
            {
                this.receiver = receiver;
            } 

    请求者(Invoker) 发送  具体命令(ConcreteCommand)给接受者 因此在请求者 中需要有 命令角色Command

     具体命令(ConcreteCommand)的构造函数中需要知道 接受者 是谁 

    // 构造函数
    public ConcreteCommand(Receiver receiver) : base(receiver) { }

    // 创建接收命令,调用程序
    Receiver r = new Receiver();
    Command c = new ConcreteCommand(r);//为某一命令指定接收者
    Invoker i = new Invoker();

    // 设置和执行命令
    i.SetCommand(c); //请求者发送命令。 命
    i.ExecuteCommand(); //请求者发送命令后的执行命令结果

          static void Main(string[] args)
            {
                // 创建接收命令,调用程序 
                Receiver r = new Receiver();
                Command c = new ConcreteCommand(r);
                Invoker i = new Invoker();
    
                // 设置和执行命令
                i.SetCommand(c);
                i.ExecuteCommand();
    
                Console.ReadLine();
            }
    
    
         /// <summary>
        /// 命令(Command)角色
        /// </summary>
        public abstract class Command
        { 
            protected Receiver receiver; 
            // 构造函数
            public Command(Receiver receiver)
            {
                this.receiver = receiver;
            } 
            public abstract void Execute();
        }
    
        // 具体命令(ConcreteCommand)角色
        public class ConcreteCommand : Command
        {
            // 构造函数
            public ConcreteCommand(Receiver receiver) : base(receiver) { }
    
            // Methods
            public override void Execute()
            {
                receiver.Action();
            }
        }
        // 接收者(Receiver)角色
        public class Receiver
        {
            public void Action()
            {
                Console.WriteLine("接收者(Receiver)Action()");
            }
        }
    
        //  请求者(Invoker)角色
        public class Invoker
        { 
            private Command command;
            // Methods
            public void SetCommand(Command command)
            {
                this.command = command;
            }
            public void ExecuteCommand()
            {
                command.Execute();
            }
        }
  • 相关阅读:
    ASP.NET上传文件的三种基本方法
    实例分析 equals 和 ==
    如何保证Web Service的安全
    Winform动态显示图片,数据流方式
    C# 文件保存到数据库中或者从数据库中读取文件
    简说Session
    NotifyIcon的简单使用
    c# Invoke和BeginInvoke 区别
    DataGridView 的 CurrentCellDirtyStateChanged事件用法
    十种发送邮件的方式
  • 原文地址:https://www.cnblogs.com/dragon-L/p/3791286.html
Copyright © 2020-2023  润新知