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