在C#中,命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,这样可以让请求的发送者和接收者解耦,并且可以对请求进行参数化、队列化、记录日志、撤销等操作。
命令模式有以下几个关键角色:
Command(命令):定义了执行操作的接口,通常包括一个执行方法。
ConcreteCommand(具体命令):实现了Command接口,具体定义了执行操作的方法。
Receiver(接收者):定义了操作的执行者,接收到具体命令后执行相应的操作。
Invoker(调用者):调用命令执行操作,可以持有一个命令对象或命令对象的集合。
下面是一个示例,展示如何在C#中使用命令模式来实现一个简单的遥控器控制电灯的功能:
namespace CommandPattern_命令模式
{
public class Command
{
// Command
public interface ICommand
{
void Execute();
}
// ConcreteCommand
public class LightOnCommand : ICommand
{
private readonly Light _light;
public LightOnCommand(Light light)
{
_light = light;
}
public void Execute()
{
_light.TurnOn();
}
}
public class LightOffCommand : ICommand
{
private readonly Light _light;
public LightOffCommand(Light light)
{
_light = light;
}
public void Execute()
{
_light.TurnOff();
}
}
// Receiver
public class Light
{
public void TurnOn()
{
Console.WriteLine("The light is on");
}
public void TurnOff()
{
Console.WriteLine("The light is off");
}
}
// Invoker
public class RemoteControl
{
private readonly ICommand _onCommand;
private readonly ICommand _offCommand;
public RemoteControl(ICommand onCommand, ICommand offCommand)
{
_onCommand = onCommand;
_offCommand = offCommand;
}
public void TurnOnLight()
{
_onCommand.Execute();
}
public void TurnOffLight()
{
_offCommand.Execute();
}
}
}
}
namespace CommandPattern_命令模式
{
internal class Program
{
static void Main(string[] args)
{
Light light = new Light();
ICommand onCommand = new LightOnCommand(light);
ICommand offCommand = new LightOffCommand(light);
RemoteControl remoteControl = new RemoteControl(onCommand, offCommand);
remoteControl.TurnOnLight();
remoteControl.TurnOffLight();
//输出结果
//The light is on
//The light is off
Console.Read();
}
}
}
在上述示例中,使用命令模式实现了一个遥控器控制电灯的功能。ICommand是命令接口,定义了执行操作的方法。具体命令(LightOnCommand和LightOffCommand)实现了ICommand接口,分别定义了打开灯和关闭灯的操作。接收者(Light)是真正执行命令的对象。调用者(RemoteControl)持有命令对象,并通过调用命令对象的执行方法来执行相应的操作。
在Client中,首先创建一个Light对象,并创建所需的具体命令和调用者对象。然后调用调用者的相关方法来执行相应的操作。
通过使用命令模式,可以将请求发送者和接收者解耦,发送者只需要知道如何调用命令对象,而不需要知道如何执行实际操作。同时,命令模式还支持对请求进行参数化、队列化、记录日志、撤销等操作。这使得系统更加灵活和可扩展,可以支持各种不同的操作和请求的处理。
标签:ICommand,light,void,模式,命令,Light,CommandPattern,public From: https://www.cnblogs.com/ZHIZRL/p/17647977.html