Compare commits
2 Commits
91e4cafaa9
...
301e6da1a9
Author | SHA1 | Date |
---|---|---|
Alexander Zhirov | 301e6da1a9 | |
Alexander Zhirov | 3c374df63d |
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
1. [Стратегия](strategy/)
|
1. [Стратегия](strategy/)
|
||||||
2. [Наблюдатель](observer/)
|
2. [Наблюдатель](observer/)
|
||||||
|
3. [Команда](command/)
|
||||||
|
|
||||||
### Структурные
|
### Структурные
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Команда
|
||||||
|
|
||||||
|
Поведенческий паттерн проектирования, который превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций.
|
||||||
|
|
||||||
|
Паттерн **Команда** инкапсулирует запрос в виде объекта, делая возможной параметризацию клиентских объектов с другими запросами, организацию очереди или регистрацию запросов, а также поддержку отмены операций.
|
|
@ -0,0 +1,25 @@
|
||||||
|
module command.simpleremotecontrol.app;
|
||||||
|
|
||||||
|
import command.simpleremotecontrol.simpleremotecontrol;
|
||||||
|
import command.simpleremotecontrol.lightoncommand;
|
||||||
|
import command.simpleremotecontrol.lightoffcommand;
|
||||||
|
import command.simpleremotecontrol.light;
|
||||||
|
import command.simpleremotecontrol.garagedooropencommand;
|
||||||
|
import command.simpleremotecontrol.garagedoor;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
auto remote = new SimpleRemoteControl();
|
||||||
|
auto light = new Light();
|
||||||
|
auto lightOn = new LightOnCommand(light);
|
||||||
|
auto lightOff = new LightOffCommand(light);
|
||||||
|
auto garageDoor = new GarageDoor();
|
||||||
|
auto garageDoorOpen = new GarageDoorOpenCommand(garageDoor);
|
||||||
|
|
||||||
|
remote.setCommand(lightOn);
|
||||||
|
remote.buttonWasPressed();
|
||||||
|
remote.setCommand(lightOff);
|
||||||
|
remote.buttonWasPressed();
|
||||||
|
remote.setCommand(garageDoorOpen);
|
||||||
|
remote.buttonWasPressed();
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
module command.simpleremotecontrol.command;
|
||||||
|
|
||||||
|
interface Command
|
||||||
|
{
|
||||||
|
void execute();
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
module command.simpleremotecontrol.garagedoor;
|
||||||
|
|
||||||
|
import std.stdio : writeln;
|
||||||
|
|
||||||
|
class GarageDoor
|
||||||
|
{
|
||||||
|
void up()
|
||||||
|
{
|
||||||
|
writeln("Garage Door is Open");
|
||||||
|
}
|
||||||
|
|
||||||
|
void down()
|
||||||
|
{
|
||||||
|
writeln("Garage Door is Closed");
|
||||||
|
}
|
||||||
|
|
||||||
|
void stop()
|
||||||
|
{
|
||||||
|
writeln("Garage Door is Stopped");
|
||||||
|
}
|
||||||
|
|
||||||
|
void lightOn()
|
||||||
|
{
|
||||||
|
writeln("Garage light is on");
|
||||||
|
}
|
||||||
|
|
||||||
|
void lightOff()
|
||||||
|
{
|
||||||
|
writeln("Garage light is off");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
module command.simpleremotecontrol.garagedooropencommand;
|
||||||
|
|
||||||
|
import command.simpleremotecontrol.command;
|
||||||
|
import command.simpleremotecontrol.garagedoor;
|
||||||
|
|
||||||
|
class GarageDoorOpenCommand : Command
|
||||||
|
{
|
||||||
|
GarageDoor garageDoor;
|
||||||
|
|
||||||
|
this(GarageDoor garageDoor)
|
||||||
|
{
|
||||||
|
this.garageDoor = garageDoor;
|
||||||
|
}
|
||||||
|
|
||||||
|
override void execute()
|
||||||
|
{
|
||||||
|
garageDoor.up();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
module command.simpleremotecontrol.light;
|
||||||
|
|
||||||
|
import std.stdio : writeln;
|
||||||
|
|
||||||
|
class Light
|
||||||
|
{
|
||||||
|
void on()
|
||||||
|
{
|
||||||
|
writeln("Light is On");
|
||||||
|
}
|
||||||
|
|
||||||
|
void off()
|
||||||
|
{
|
||||||
|
writeln("Light is Off");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
module command.simpleremotecontrol.lightoffcommand;
|
||||||
|
|
||||||
|
import command.simpleremotecontrol.command;
|
||||||
|
import command.simpleremotecontrol.light;
|
||||||
|
|
||||||
|
class LightOffCommand : Command
|
||||||
|
{
|
||||||
|
Light light;
|
||||||
|
|
||||||
|
this(Light light)
|
||||||
|
{
|
||||||
|
this.light = light;
|
||||||
|
}
|
||||||
|
|
||||||
|
override void execute()
|
||||||
|
{
|
||||||
|
light.off();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
module command.simpleremotecontrol.lightoncommand;
|
||||||
|
|
||||||
|
import command.simpleremotecontrol.command;
|
||||||
|
import command.simpleremotecontrol.light;
|
||||||
|
|
||||||
|
class LightOnCommand : Command
|
||||||
|
{
|
||||||
|
Light light;
|
||||||
|
|
||||||
|
this(Light light)
|
||||||
|
{
|
||||||
|
this.light = light;
|
||||||
|
}
|
||||||
|
|
||||||
|
override void execute()
|
||||||
|
{
|
||||||
|
light.on();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
module command.simpleremotecontrol.simpleremotecontrol;
|
||||||
|
|
||||||
|
import command.simpleremotecontrol.command;
|
||||||
|
|
||||||
|
class SimpleRemoteControl
|
||||||
|
{
|
||||||
|
Command slot;
|
||||||
|
|
||||||
|
void setCommand(Command command)
|
||||||
|
{
|
||||||
|
slot = command;
|
||||||
|
}
|
||||||
|
|
||||||
|
void buttonWasPressed()
|
||||||
|
{
|
||||||
|
slot.execute();
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue