设计模式之命令模式

1、类图

命令模式结构:

实例类图:

2、创建项目

…………………………

3、 FunctionButton:功能键类,充当请求调用者(请求发送者)。

using System;

namespace CommandSample

{

    class FunctionButton

    {

        private Command command;

        public Command Command

        {

            get { return command; }

            set { command = value; }

        }

        public void Click()

        {

            Console.WriteLine("单击功能键!");

            command.Execute();

        }

    }

}

2、  Command:抽象命令类

namespace CommandSample

{

    abstract class Command

    {

        public abstract void Execute();

    }

}

4、 ExitCommand:退出命令类,充当具体命令类

namespace CommandSample

{

    class ExitCommand : Command

    {

        private SystemExitClass seObj;

        public ExitCommand()

        {

            seObj = new SystemExitClass();

        }

        public override void Execute()

        {

            seObj.Exit();

        }

    }

}

5、 HelpCommand:帮助命令类,充当具体命令类。

namespace CommandSample

{

    class HelpCommand : Command

    {

        private DisplayHelpClass hcObj;

        public HelpCommand()

        {

            hcObj = new DisplayHelpClass();

        }

        public override void Execute()

        {

            hcObj.Display();

        }

    }

}

6、 SystemExitClass:退出系统模拟实现类,充当强求接收者。

using System;

namespace CommandSample

{

    class SystemExitClass

    {

        public void Exit()

        {

            Console.WriteLine("退出系统!");

        }

    }

}

7、 DisplayHelpClass:显示帮助文档模实现类,充当请求接收者。

using System;

namespace CommandSample

{

    class DisplayHelpClass

    {

        public void Display()

        {

            Console.WriteLine("显示帮助文档!");

        }

    }

}

8、 配置文件App.config:在配置文件中存储了具体命令类的类名。

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <appSettings>

    <add key="command" value="CommandSample.HelpCommand"/>

  </appSettings>

</configuration>

9、 Program:客户端测试类

using System;

using System.Configuration;

using System.Reflection;

namespace CommandSample

{

    class Program

    {

        static void Main(string[] args)

        {

            FunctionButton fb = new FunctionButton();

            

            Command command;

            //读取配置文件

            string commandStr = ConfigurationManager.AppSettings["command"];

            //反射生成对象

            command = (Command)Assembly.Load("CommandSample").CreateInstance(commandStr);

            //设置命令对象

            fb.Command = command;

            fb.Click();

            Console.Read();

        }

    }

}

10、 结果及分析,编译并运行程序,输出结果如下:

 

如果需要更换具体命令类,无须修改源代码,只需修改配置文件,例如将退出命令改为帮助命令,只需将存储在配置文件中的具体命令类名ExitCommand改为HelpCommand.

原文地址:https://www.cnblogs.com/cqxhl/p/6097438.html