using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesignPattern
{
internal class CommandPattern
{
//命令模式
//将一个请求封装为一个对象,从而可以让你用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。
//
private void main()
{
//客户端实现
FunctionButton fb = new FunctionButton();
Command command=new HelpCommand();
//Command command = new ExitCommand(); //可以将功能键绑定的具体命令存放在配置文件中或者数据库中,通过反射的方式进行Command创建
fb.Commadn=command;
fb.Click();
//输出
//单击功能键
//退出系统
}
}
#region 功能键,调用者(invoker)
//功能键类
class FunctionButton
{
private Command command;
//为功能键注入命令
public Command Commadn
{
get { return command; }
set { command = value; }
}
//发送请求的方法
public void Click()
{
Console.WriteLine("单击功能键!");
command.Execute();
}
}
#endregion
#region 抽象命令,调用者针对抽象命令编程。 具体命令可以在配置文件或数据库中动态指定,反射创建,符合开闭原则
//抽象命令类
abstract class Command
{
public abstract void Execute();
}
#endregion
#region 退出命令及其实现类
//退出命令类
class ExitCommand : Command
{
private SystemExitClass seOBJ; //维持对请求接收者的引用
public ExitCommand()
{
seOBJ = new SystemExitClass();
}
//命令执行方法,将调用请求接收者的业务方法
public override void Execute()
{
seOBJ.Exit();
}
}
//退出系统模拟实现类,充当请求接收者
class SystemExitClass
{
public void Exit()
{
Console.WriteLine("退出系统!");
}
}
#endregion
#region 帮助命令及其实现类
//帮助命令类
class HelpCommand : Command
{
private DisplayHelperClass hcOBJ;//维持对请求接收者的引用
public HelpCommand()
{
hcOBJ = new DisplayHelperClass();
}
//命令执行方法,将调用请求接收者的业务方法
public override void Execute()
{
hcOBJ.Display();
}
}
//显示帮助文档模拟实现类,充当请求接收者。
class DisplayHelperClass
{
public void Display()
{
Console.WriteLine("显示帮助文档!");
}
}
#endregion
}
《C#设计模式》==>命令模式
最新推荐文章于 2024-09-16 21:00:00 发布