C# 设计模式-命令(Command)

将一个请求封装为一个对象,达到用不同请求对客户进行参数化。调用者通过某个命令来调用接收者执行相关操作,减弱调用者与接收者的耦合度。

主要组成:

Command-命令父类或接口

ConcreteCommand-具体命令

Invoker-调用者

Receiver-接收者,执行命令指定的相关操作


相关类:

using System;

namespace Command
{
    /// 
    /// 命令父类(或接口)
    /// 
    abstract class CommandClass
    {
        public abstract void Execute();
    }

    /// 
    /// 打开文件(具体命令)
    /// 
    class OpenFileCommand : CommandClass
    {
        FileReceiver fileReceiver;

        public OpenFileCommand(FileReceiver fileReceiver)
        {
            this.fileReceiver = fileReceiver;
        }
        public override void Execute()
        {
            fileReceiver.OpenFile();
        }
    }
    /// 
    /// 复制文件(具体命令)
    /// 
    class CopyFileCommand : CommandClass
    {
        FileReceiver fileReceiver;

        public CopyFileCommand(FileReceiver fileReceiver)
        {
            this.fileReceiver = fileReceiver;
        }
        public override void Execute()
        {
            fileReceiver.CopyFile();
        }
    }

    /// 
    /// 文件(接收者,执行相关操作)
    /// 
    class FileReceiver
    {
        public void OpenFile()
        {
            Console.WriteLine("打开文件");
        }

        public void CopyFile()
        {
            Console.WriteLine("复制文件");
        }
    }

    /// 
    /// 调用者(可忽略调用者,直接调用Execute()命令)
    /// 
    class Invoker
    {
        //调用命令
        public void Invoke(CommandClass command)
        {
            command.Execute();
        }
    }
}

调用:

using System;

namespace Command
{
    class Program
    {
        static void Main(string[] args)
        {
            //调用者
            Invoker invoker = new Invoker();
            //接收者
            FileReceiver fileReceiver = new FileReceiver();
            //具体命令
            OpenFileCommand openFileCommand = new OpenFileCommand(fileReceiver);
            //调用命令
            invoker.Invoke(openFileCommand);

            CopyFileCommand copyFileCommand = new CopyFileCommand(fileReceiver);
            invoker.Invoke(copyFileCommand);

            Console.Read();
        }
    }
}

结果:

C# 设计模式-命令(Command)_第1张图片


参考资料:《设计模式-可复用面对对象软件的基础》


你可能感兴趣的:(C#-设计模式)