Передайте запросы от клиента в объект, позволяя вам параметризовать клиента с различными запросами. Используемые для отделения «поведения запроса» и «поведения», разбирается в сфере, может быть достигнута свободная связь между ними, чтобы адаптироваться к изменениям. Разделите изменяющиеся и неизменные факторы.
1. Роль
Командование
Определяет интерфейс команды и объявляет метод выполнения.
ConceteCommand
Объект реализации командного интерфейса - это «виртуальная» реализация; Обычно он удерживает приемник и вызывает функцию приемника, чтобы завершить операцию, которая будет выполнена командой.
Приемник
Получатель, объект, который действительно выполняет команду. Любой класс может стать приемником, если он может реализовать соответствующие функции, требуемые командой.
Invoker
Объект команды должен выполнить запрос и обычно удерживает объект команды и может удерживать множество объектов команды. Именно здесь клиент фактически запускает команду и требует, чтобы команда выполняла соответствующую операцию, что означает, что он эквивалентен использованию ввода объекта команды.
Клиент
Создайте конкретный объект команды и установите приемник объекта команды. Обратите внимание, что это не клиент в нашем обычном смысле, но собирает объект команд и приемник. Возможно, было бы лучше назвать этого клиента ассемблером, потому что клиент, который действительно использует командные триггерные выполнения от Invoker.
2. Преимущества
3. Недостатки <br /> с помощью командного режима может привести к тому, что некоторые системы имеют слишком много конкретных командных классов. Поскольку для каждой команды требуется конкретный класс команд, для некоторых систем может потребоваться большое количество конкретных классов команд, что повлияет на использование командного режима.
IV Применимая ситуация
5. Приложение <Br /> Моделирование включает в себя включение, выключение и изменение команд для работы телевизора. Код выглядит следующим образом
// интерфейс для выполнения команды команды общедоступного интерфейса {void execute (); } // Command Receiver Pretiver Public Class TV {public int CurrentChannel = 0; public void turnon () {System.out.println («Televisino включен»); } public void Surwoff () {System.out.println («Телевидение выключено.»); } public void ChangeChannel (int Channel) {this.currentChannel = Channel; System.out.println («Теперь телеканал - + канал); }} // Выключить команду ConcreteCommand public Class CommandOn Commandment Command {private TV mytv; public Commandon (TV TV) {myTV = TV; } public void execute () {mytv.turnon (); }} // Выключить команду ConceteCommand Public Class CommandOff Commandom Command {Private TV MYTV; public CommandOff (TV TV) {myTV = TV; } public void execute () {mytv.turnoff (); }} // Команда переключения канала ConceteCommand public Class CommandChange Command {Private TV MYTV; частный int -канал; public CommandChange (TV TV, int Channel) {mytv = TV; this.channel = канал; } public void execute () {mytv.changechannel (Channel); }} // это можно рассматривать как удаленный контроль Invoker Public Class Control {Private Command Oncommand, OffCommand, ChangeChannel; public Control (Command On, Command Off, Command Channel) {onCommand = on; OffCommand = off; ChangeChannel = Channel; } public void turnon () {oncommand.execute (); } public void -поворот () {offcommand.execute (); } public void ChangeChannel () {ChangeChannel.execute (); }} // тест класс клиент общедоступный класс клиент {public static void main (string [] args) {// получатель командного получателя TV mytv = new TV (); // Power-On Command ConceteCommond Commandon on = new Commandon (mytv); // Команда Power-Off ConceteCommond CommandOff off = new CommandOff (MYTV); // Команда переключения канала ConceteCommond CommandChange Cannel = New CommandChange (MYTV, 2); // объект управления командой CONTROL CONTROL = NEW CONTROL (ON, OFF, Channel); // power-on control.turnon (); // переключение канала Control.ChangeChannel (); // shut control.turnoff (); }} Результаты исполнения
Televisino включен.
Теперь телеканал 2
Телевидение отключено.
6. Резюме
1. Суть командного режима состоит в том, чтобы инкапсулировать команду и отделить ответственность за выдачу команды и ответственность за выполнение команды.
2. Каждая команда является операцией: запрашивающая сторона выдает запрос, требующий выполнения операции; Приемная сторона получает запрос и выполняет операцию.
3. Командный режим позволяет запрашивающей стороне быть независимой от принимающей стороны, так что запрашивающая сторона не должна знать интерфейс стороны, получающей запрос, и не должен знать, как был получен запрос, независимо от того, когда и как операция была выполнена.
4. Командный режим делает сам запрос объектом, который можно хранить и передавать, как и другие объекты.
5. Ключом к командному режиму является представление абстрактного командного интерфейса, а отправитель программирует для абстрактного командного интерфейса. Только конкретные команды, которые реализуют интерфейс Abstract Command, могут быть связаны с приемником.
Выше приведено подробное введение в шаблон дизайна команд Java, я надеюсь, что это будет полезно для каждого обучения.