Командный режим
Командный режим (команда) представляет собой шаблон проектирования управляемых данными, он относится к типу модели. Команда запроса в виде пакетов в объекте, и перешел к вызывающему объекту. Глядя объект вызова может обрабатывать соответствующий объект команды, и команда передается на соответствующий объект, который выполняет команду.
введение
Намерение: Инкапсулируйте запрос как объект, так что вы можете использовать различные запросы параметризировать клиентов.
Главным образом , чтобы решить:в программной системе, поведение запрашивающей и поведения , как правило , достичь отношения тесно связаны между собой , но в некоторых ситуациях, таких , как необходимость проведения записи, отмены или повтора, и другой обработки транзакций, это непреодолимое тесно связаны изменения в конструкции не подходит.
Когда использовать: В некоторых случаях, например, к поведению "записи, отмена / повтор, операции" и другие виды лечения, такие изменения не могут противостоять жесткой муфты неуместна.В этом случае, как будет "поведение запрашивающая" и "поведение реализатор" развязку? Действует как совокупность абстрактных объектов, слабая связь может быть достигнуто между ними.
Как исправить: Запуск получателем для вызова абонента, в следующем порядке: приемник звонящего по телефону → → Command.
Код ключа: определение трех ролей: 1, получил реальный командный объект исполнения 2, 3 команды, объекты инициатора вызова с помощью ввода команд
Примеры применения: распорками 1 ядро контроллер ActionServlet в действии только один, эквивалент заклинателя, в то время как модель класса слой будет , как различные приложения имеют различные классы модели, эквивалент конкретного командования.
Преимущества: 1, система снижает степень сцепления.2, новые команды могут быть легко добавлены в систему.
Недостатки: командный режим может привести некоторые системы имеют слишком много конкретного класса команд.
Сценарий использования: что местная команда может использовать командный режим, например: 1, GUI каждая кнопка является командой.2, моделируются CMD.
Примечание: Система должна поддерживать команду отмены (Undo) и операции операции восстановления (Redo), вы можете рассмотреть вопрос об использовании режима управления см расширенного режима командной строки.
реализация
Сначала мы создали в качестве командного интерфейса назаказ,а затем создать класс запросаStock.Entity и командные классыBuyStockSellStock,заказреализует интерфейс, он будет выполнять фактическую обработку команд. Созданный как классБрокеромобъектавызова,который может принимать заказы и заказы.
ОбъектБрокерс использованием режима управления, основанный на тип команды , чтобы определить , какой именно объект для выполнения , какие команды.CommandPatternDemo,наши демонстрационные классы , использующие классBroker, чтобы продемонстрировать командный режим.
Шаг 1
Создание интерфейса командной строки.
Order.java
открытый интерфейс заказа { недействительными выполнить (); }
Шаг 2
Создание класса запроса.
Stock.java
общественного класса со { частное имя String = "ABC"; частное INT количество = 10; общественного недействительными покупка () { System.out.println ( "Фондовая [Имя:" + имя + ", Количество: "+ количество +"] купил "); } общественного недействительными продают () { System.out.println ( "Фондовая [Имя:" + имя + ", Количество: "+ количество +"] проданный "); } }
Шаг 3
Создать класс объектовOrderреализует интерфейс.
BuyStock.java
Открытый класс BuyStock реализует Order { частный сток abcStock; общественного BuyStock (со abcStock) { this.abcStock = abcStock; } общественного недействительными выполнить () { abcStock.buy (); } }
SellStock.java
Открытый класс SellStock реализует Order { частный сток abcStock; общественного SellStock (со abcStock) { this.abcStock = abcStock; } общественного недействительными выполнить () { abcStock.sell (); } }
Шаг 4
Создание командных вызовов класса.
Broker.java
импорт java.util.ArrayList; импорт java.util.List; Открытый класс Брокер { частный List <Order> OrderList = новый ArrayList <Order> (); общественного недействительными takeOrder (заказ Order) { orderList.add (заказ); } общественного недействительными placeOrders () { для (заказ Заказать: OrderList) { order.execute (); } orderList.clear (); } }
Шаг 5
Используйте класс Broker принимать и исполнять команды.
CommandPatternDemo.java
Открытый класс CommandPatternDemo { государственной статической силы основных (String []) {агдз Фото abcStock = новый Stock (); BuyStock buyStockOrder = новый BuyStock (abcStock); SellStock sellStockOrder = новый SellStock (abcStock); Брокер Брокер = новый брокер (); broker.takeOrder (buyStockOrder); broker.takeOrder (sellStockOrder); broker.placeOrders (); } }
Шаг 6
Проверьте выход.
Фото [Имя: ABC, Количество: 10] купил Фото [Имя: ABC, Количество: 10] продано