2014-11-16 8 views
1

Я работаю над своей первой большой программой, которая будет реализовывать ряд шаблонов дизайна, которые я изучал. Часть моей программы - это пользовательский интерфейс с кнопками, и я использую шаблон команды для команд, привязанных к этим кнопкам. Моя путаница с «клиентом». Это где-то в вашей программе?В контексте шаблона проектирования команд, является ли клиент основной частью вашей программы?

+0

Пожалуйста, добавьте более подробную информацию о "client." Какую ссылку вы используете для Command Pattern? – Fuhrmanator

ответ

1

Они, как я вижу это: есть два важных концептуальных лица в структуре команды и тот, который мог бы опущенные:

  • Самое главное клиент что хочет что-то должно произойти. Объекты команды существуют из-за клиента. Клиент хочет добиться чего-то с их помощью.

  • Invoker, довольно глупый объект, который просто знает, как нажимать простые кнопки (= использовать методы командного интерфейса). Не нужно ничего знать о других объектах или о том, что эти команды действительно делают. Все, о чем нужно заботиться, - это то, что при заданной мелочи ему нужно нажать эту кнопку. (В вашем случае: рамка gui, когда люди нажимают кнопки gui, «толкает» onAction() или метод whetever - «кнопка»).

  • Приемник. Вид просто раздувается по всему изображению: если команда содержит вызов метода, то, очевидно, есть объект, который получает этот вызов метода. Но нет причин включать приемщика в картину.

Что вы определяете как «клиент» в своей программе, в основном зависит от вас. Вещь, которая хотела, чтобы команды существовали. Команды работают для клиента.

Я действительно не знаю, что именно может быть клиентом в вашем случае. Поскольку вы используете команды в качестве обратного вызова, возможно, приемник этих команд также является клиентом. Это то место, которое хочет получить информацию о нажатиях кнопок, чтобы оно могло действовать.

Клиент действительно может быть очень много, простой метод или целый уровень уровня абстракции тысяч классов. Возможно, даже объекты, которые не моделируются как классы. Как и вы, как программист.

0

В вашем сценарии это, вероятно, так, но это не так для командного шаблона в целом. Это может быть другая программа или сетевой интерфейс. Важно то, что клиент хочет возиться со своими классами, а шаблон команды будет обеспечивать централизацию всего

0

Клиенты представлены во многих шаблонах дизайна, а не только в Command. Вот диаграмма от http://sourcemaking.com/design_patterns/command:

Command pattern example

Часто клиент является частью дизайна, который хочет извлечь выгоду из protected variations шаблона проектирования. Защищенные вариации работают как схема подключаемого модуля. То есть вы можете внести изменения в часть open, и клиент не будет затронут, потому что он зависит только от закрытой части.

Вы можете сказать в Шаблоне команд, что клиенту не потребуется (много), если вы добавите новые команды (которые похожи на плагины).