Шаблон проектирования Observer и Command, почему меню обычно использует шаблон команд?
Вопрос в том, почему меню обычно реализуются с помощью шаблона проектирования команд, а не с помощью шаблона наблюдателя?
2 ответа
Есть два аспекта: "диспетчеризация", опция выбирается из меню, или нажимается кнопка, и запускается некоторый код. Тогда есть фактический код, который выполняется.
Я не знаю, на какую среду пользовательского интерфейса вы ссылаетесь, но я ожидаю увидеть паттерны Observer и Command, используемые в обоих случаях. Интересно, случается ли то, что случай Menu и случай Button просто реализуются вашей средой таким образом, чтобы сделать различные аспекты видимыми.
Таким образом, для меню вы предоставляете различные объекты команд, вы никогда не увидите внутреннюю диспетчеризацию, которая вызывает вашу команду. Я предполагаю, что под прикрытием должна происходить некоторая обработка событий, поэтому шаблон Observer вполне может быть использован, просто вы его не видите.
В случае кнопки вызываемый код можно рассматривать как объект команды, но мы более явно привязываем его к событию, поэтому сначала видим шаблон Observer.
Я вижу один вариант использования шаблона наблюдателя с пунктом меню или кнопкой. Предположим, есть гороскоп калькулятор. У пользователя есть кнопка для запуска генерации гороскопа. Пользователь будет нажимать кнопку и выдавать команду на сервер для расчета. Позже та же кнопка может наблюдать за состоянием сервера или наоборот для обновления статуса или для отображения печати и команды пожарной печати с кнопки. Итак Observer: события необходимо отправлять. Команда: действие выполнено.