Я работаю над своей первой большой программой, которая будет реализовывать ряд шаблонов дизайна, которые я изучал. Часть моей программы - это пользовательский интерфейс с кнопками, и я использую шаблон команды для команд, привязанных к этим кнопкам. Моя путаница с «клиентом». Это где-то в вашей программе?В контексте шаблона проектирования команд, является ли клиент основной частью вашей программы?
ответ
Они, как я вижу это: есть два важных концептуальных лица в структуре команды и тот, который мог бы опущенные:
Самое главное клиент что хочет что-то должно произойти. Объекты команды существуют из-за клиента. Клиент хочет добиться чего-то с их помощью.
Invoker, довольно глупый объект, который просто знает, как нажимать простые кнопки (= использовать методы командного интерфейса). Не нужно ничего знать о других объектах или о том, что эти команды действительно делают. Все, о чем нужно заботиться, - это то, что при заданной мелочи ему нужно нажать эту кнопку. (В вашем случае: рамка gui, когда люди нажимают кнопки gui, «толкает»
onAction()
или метод whetever - «кнопка»).Приемник. Вид просто раздувается по всему изображению: если команда содержит вызов метода, то, очевидно, есть объект, который получает этот вызов метода. Но нет причин включать приемщика в картину.
Что вы определяете как «клиент» в своей программе, в основном зависит от вас. Вещь, которая хотела, чтобы команды существовали. Команды работают для клиента.
Я действительно не знаю, что именно может быть клиентом в вашем случае. Поскольку вы используете команды в качестве обратного вызова, возможно, приемник этих команд также является клиентом. Это то место, которое хочет получить информацию о нажатиях кнопок, чтобы оно могло действовать.
Клиент действительно может быть очень много, простой метод или целый уровень уровня абстракции тысяч классов. Возможно, даже объекты, которые не моделируются как классы. Как и вы, как программист.
В вашем сценарии это, вероятно, так, но это не так для командного шаблона в целом. Это может быть другая программа или сетевой интерфейс. Важно то, что клиент хочет возиться со своими классами, а шаблон команды будет обеспечивать централизацию всего
Клиенты представлены во многих шаблонах дизайна, а не только в Command. Вот диаграмма от http://sourcemaking.com/design_patterns/command:
Часто клиент является частью дизайна, который хочет извлечь выгоду из protected variations шаблона проектирования. Защищенные вариации работают как схема подключаемого модуля. То есть вы можете внести изменения в часть open, и клиент не будет затронут, потому что он зависит только от закрытой части.
Вы можете сказать в Шаблоне команд, что клиенту не потребуется (много), если вы добавите новые команды (которые похожи на плагины).
Пожалуйста, добавьте более подробную информацию о "client." Какую ссылку вы используете для Command Pattern? – Fuhrmanator