Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Design Patterns via C#.pdf
Скачиваний:
154
Добавлен:
17.03.2016
Размер:
13.25 Mб
Скачать

179

Удобство такого построения калькулятора с использованием паттерна Command заключается в том, что оказывается легко добавлять новые команды, которые можно тонко конфигурировать. Также можно расширять вычислительные возможности самого калькулятора, например, логическим устройством или устройством для вычислений чисел с плавающей точкой (FPU). На рисунке ниже показана структурная схема калькулятора расширенного новой командой Pow и новым вычислительным устройством FPU.

Структура паттерна на языке UML

См. Пример к главе: \014_Command\001_Command

180

Структура паттерна на языке C#

class Program { static void Main() { Receiver receiver = new Receiver(); Command command = new ConcreteCommand(receiver); Invoker invoker = new Invoker();

invoker.StoreCommand(command); invoker.ExecuteCommand(); } }

class Invoker { Command command;

public void StoreCommand(Command command) { this.command = command; }

public void ExecuteCommand() { command.Execute(); } }

class Receiver { public void Action() { Console.WriteLine("Receiver"); } }

abstract class Command { protected Receiver receiver;

public Command(Receiver receiver) { this.receiver = receiver; }

public abstract void Execute(); }

class ConcreteCommand :

Command

{

 

public ConcreteCommand(Receiver receiver)

: base(receiver)

 

{

 

}

 

public override void Execute()

{

 

receiver.Action();

}

 

}

 

См. Пример к главе: \014_Command\001_Command

Участники

Command - Команда:

Предоставляет интерфейс для выполнения операции.

ConcreteCommand - Конкретная команда:

Представляет собой объектно-ориентированное выражение соответствия между объектом класса Receiver и выполняемым им действием Action. Реализует операцию Execute которая вызывает соответствующие операции объекта класса Receiver.

Client - Клиент:

Создает объект класса ConcreteCommand и устанавливает его получателя - объект класса

Receiver.

Invoker - Инициатор:

Обращается к объекту-команде для выполнения запроса.

Receiver - Получатель:

Обладает функциональностью достаточной для выполнения определенного запроса. В роли

получателя запроса может выступать любой класс.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]