C# 语言 如何实现命令模式

C#阿木 发布于 2025-06-13 9 次阅读


命令模式在C中的实现与应用

命令模式是一种行为设计模式,它将请求封装为一个对象,从而允许用户使用不同的请求、队列或日志请求,以及支持可撤销的操作。在C中,命令模式可以通过创建命令接口、具体命令类、调用者类和接收者类来实现。本文将详细介绍如何在C中实现命令模式,并探讨其应用场景。

命令模式的基本结构

命令模式的主要组成部分包括:

1. 命令接口(ICommand):定义执行操作的接口。
2. 具体命令类(ConcreteCommand):实现命令接口,封装对接收者的操作。
3. 接收者类(Receiver):执行与请求相关的操作。
4. 调用者类(Invoker):持有命令对象,并调用命令对象的执行方法。
5. 客户端类(Client):创建命令对象,并设置接收者。

实现命令模式

以下是一个简单的命令模式实现示例:

1. 定义命令接口

csharp
public interface ICommand
{
void Execute();
}

2. 创建具体命令类

csharp
public class LightOnCommand : ICommand
{
private Light _light;

public LightOnCommand(Light light)
{
_light = light;
}

public void Execute()
{
_light.TurnOn();
}
}

public class LightOffCommand : ICommand
{
private Light _light;

public LightOffCommand(Light light)
{
_light = light;
}

public void Execute()
{
_light.TurnOff();
}
}

3. 创建接收者类

csharp
public class Light
{
public void TurnOn()
{
Console.WriteLine("Light is turned on.");
}

public void TurnOff()
{
Console.WriteLine("Light is turned off.");
}
}

4. 创建调用者类

csharp
public class RemoteControl
{
private ICommand _command;

public void SetCommand(ICommand command)
{
_command = command;
}

public void PressButton()
{
_command.Execute();
}
}

5. 客户端类

csharp
public class Client
{
public static void Main(string[] args)
{
Light light = new Light();
ICommand lightOnCommand = new LightOnCommand(light);
ICommand lightOffCommand = new LightOffCommand(light);

RemoteControl remoteControl = new RemoteControl();
remoteControl.SetCommand(lightOnCommand);
remoteControl.PressButton(); // Light is turned on.

remoteControl.SetCommand(lightOffCommand);
remoteControl.PressButton(); // Light is turned off.
}
}

命令模式的应用场景

1. 用户界面:在图形用户界面中,按钮点击可以触发命令执行,实现命令模式。
2. 操作日志:记录用户操作的历史记录,便于回滚和审计。
3. 撤销/重做操作:在编辑器或应用程序中,实现撤销和重做功能。
4. 宏操作:将多个操作封装成一个命令,方便执行和传递。

总结

命令模式在C中实现相对简单,通过定义命令接口、具体命令类、接收者类和调用者类,可以轻松地实现复杂的命令操作。在实际应用中,命令模式可以提高代码的模块化和可扩展性,是设计模式中常用的一种。