Skip to main content

Які класи зазвичай беруть участь у реалізації Command?

У реалізації патерна Command (Команда) зазвичай бере участь п'ять ключових класів (або ролей), які спільно забезпечують виконання, скасування і керування командами.


1. Command (Інтерфейс команди)

Визначає єдиний контракт для всіх команд - зазвичай включає методи:

  • execute() - виконати дію,
  • (опціонально) undo() - скасувати дію.

Приклад:

java
interface Command { void execute(); void undo(); }

2. ConcreteCommand (Конкретна команда)

Реалізує інтерфейс Command, інкапсулює конкретну дію над об'єктом-отримувачем. Зберігає:

  • посилання на Receiver,
  • дані, необхідні для виконання і скасування.

Приклад:

java
class TurnOnCommand implements Command { private Light light; public TurnOnCommand(Light light) { this.light = light; } public void execute() { light.turnOn(); } public void undo() { light.turnOff(); } }

3. Receiver (Отримувач)

Об'єкт, який знає, як виконувати операцію. Команда просто викликає його методи, не знаючи, як саме вони реалізовані.

Приклад:

java
class Light { void turnOn() { System.out.println("Світло увімкнено"); } void turnOff() { System.out.println("Світло вимкнено"); } }

4. Invoker (Ініціатор)

Компонент, який запускає команду, але не знає, що вона робить. Він може зберігати команду, викликати execute() і undo(), а також керувати історією.

Приклад:

java
class RemoteControl { private Command command; public void setCommand(Command command) { this.command = command; } public void pressButton() { command.execute(); } public void pressUndo() { command.undo(); } }

5. Client (Клієнт)

Створює команди, пов'язує їх з отримувачами і передає ініціатору. Він знає, які дії потрібно виконати, але не займається їхньою реалізацією.

Приклад:

java
Light light = new Light(); Command turnOn = new TurnOnCommand(light); RemoteControl remote = new RemoteControl(); remote.setCommand(turnOn); remote.pressButton();

6. Підсумкова структура

javascript
Client InvokerCommandReceiver ConcreteCommand

Висновок

КласРоль
CommandВизначає інтерфейс виконання (і скасування) дій
ConcreteCommandЗберігає посилання на отримувача і реалізує конкретну дію
ReceiverЗнає, як виконати операцію
InvokerЗапускає команди, керує історією
ClientНалаштовує зв'язки між командами і отримувачами

Підсумок: Ця структура дозволяє відокремити "що зробити" від "як зробити", роблячи систему гнучкою, розширюваною і легко керованою - у тому числі для undo/redo, макросів і черг завдань.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.