ПАТТЕРН КОМАНДА (COMMAND)
Паттерн Команда можно описать так... Есть пульт с кнопками. Нажатие на кнопку запускает выполнение абстрактной команды. Наследуемый класс от команды содержит в себе методы, которые управляют изменениями состояния объекта (например, этот класс включает и выключает свет).
Паттерн Команда инкапсулирует запрос в виде объекта, делая возможной параметризацию клиенстких объектов с другими запросами, организацию очереди или регистрацию запросов, а также поддержку отмены операций.
// интерфейс комманды
interface eiCommand
{
void Execute();
}
// реализация класса управления коммандами
class SimpleRemoteControl
{
private eiCommand slot;
public SimpleRemoteControl()
{
}
public void setCommand(eiCommand prmCommand)
{
slot = prmCommand;
}
public void buttonWasPresed()
{
slot.Execute();
}
}
// конкретный класс объекта свет
class Light
{
internal void on()
{
Console.WriteLine("Light is On");
//throw new NotImplementedException();
}
}
// конкретный класс команды
class ecLightOnCommand : eiCommand
{
private Light light;
public ecLightOnCommand(Light prmLight)
{
this.light = prmLight;
}
public void Execute()
{
this.light.on();
}
}
// запускаем код
static void Main(string[] args)
{
SimpleRemoteControl remote = new SimpleRemoteControl();
Light light = new Light();
ecLightOnCommand lightOn = new ecLightOnCommand(light);
GarageDoor garageDoor = new GarageDoor();
ecGarageDoorOpenCommand garageDoorOpen = new ecGarageDoorOpenCommand(garageDoor);
remote.setCommand(lightOn);
remote.buttonWasPresed();
remote.setCommand(garageDoorOpen);
remote.buttonWasPresed();
}