1. `ICommand.cs` (Command Interface)
This interface declares an execution method that all concrete command classes will implement.
public interface ICommand
{
void Execute();
}
2. `Light.cs` (Receiver)
The receiver class performs the actual work. Here, we use a simple example of a `Light` that can be turned on and off.
public class Light
{
public void TurnOn() => Console.WriteLine("Light is on");
public void TurnOff() => Console.WriteLine("Light is off");
}
3. `LightOnCommand.cs` and `LightOffCommand.cs` (Concrete Commands)
These classes implement the `ICommand` interface, invoking actions on the receiver.
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();
}
}
4. `RemoteControl.cs` (Invoker)
This class asks the command to carry out the request.
public class RemoteControl
{
private ICommand _command;
public void SetCommand(ICommand command)
{
_command = command;
}
public void PressButton()
{
_command.Execute();
}
}
5. `Program.cs` (Client) This is the entry point where we tie everything together and demonstrate the pattern.
class Program
{
static void Main(string[] args)
{
var light = new Light();
var lightOn = new LightOnCommand(light);
var lightOff = new LightOffCommand(light);
var remote = new RemoteControl();
remote.SetCommand(lightOn);
remote.PressButton(); // Output: Light is on
remote.SetCommand(lightOff);
remote.PressButton(); // Output: Light is off
}
}
Order of Creation and Execution
1. Define the `ICommand` Interface: It's the foundation of the command pattern.
2. Create the `Receiver` Class (`Light.cs`): It's the class that knows how to perform the operations.
3. Implement Concrete Commands (`LightOnCommand.cs` and `LightOffCommand.cs`): These classes encapsulate the action and its parameters.
4. Create the `Invoker` Class (`RemoteControl.cs`): This will use command objects to perform actions.
5. Assemble in the `Program.cs` file: This is where you create instances and demonstrate the usage of the command pattern. Expected Terminal Output When you run `Program.cs`, you should expect to see the following output in the terminal:
Light is on Light is offThis simple example demonstrates the essence of the Command design pattern in a C# context. You can expand upon this by introducing more complex commands and receivers.
No comments:
Post a Comment