Существует ли шаблон проектирования, который имеет дело с механизмом обратного вызова?
Существует ли шаблон проектирования, который имеет дело с механизмом обратного вызова?
Ответ 1
Это будет шаблон наблюдателя - из Википедии
Шаблон наблюдателя (подмножество асинхронный публикация/подписка шаблон) является шаблоном проектирования программного обеспечения в котором объект, называемый субъект, ведет список своих иждивенцев, называемых наблюдателями, и автоматически уведомляет об этом изменения состояния, обычно путем вызова одного их методов. Он в основном используется для осуществлять распределенную обработку событий системы.
Ответ 2
Это зависит от того, как используется обратный вызов.
Шаблоны проектирования - все о том, как сообщить о своих намерениях.
Если вы планируете регистрировать один или несколько обратных вызовов и их можно назвать уведомлением "в какой-то момент в будущем", вы говорите Observer. Также - фактический вызов обратного вызова в этом случае обычно "необязателен" или инициируется на основе некоторого стимула. (Обратные вызовы могут или не могут быть вызваны)
Если вы намеревались передать "что-то делать", и это делается в методе (или используется для "чего-то" во время более позднего процесса), вы говорите "Стратегия". Также - фактическое обращение обычно происходит.
Обратите внимание, что один и тот же код может быть либо - он действительно о том, как вы думаете о проблеме, так и о том, как вы хотите, чтобы другие думали об этом.
Ответ 3
обратный вызов представляет собой шаблон стратегии разработки
Ответ 4
Несколько. Проверьте http://people.bu.edu/azs/teaching/cs108/2006fall/callback_pattern.pdf и следующее:
-
Шаблон посетителя: http://en.wikipedia.org/wiki/Visitor_pattern
-
Образец наблюдателя: http://en.wikipedia.org/wiki/Observer_pattern
Наиболее подходящее будет зависеть от ситуации. Какой язык программирования вы хотите использовать и что вы хотите сделать точно?
Ответ 5
Внешний полиморфизм - Объект имеет ссылку на другой объект и функцию для вызова этого объекта, Его можно рассматривать как один тип, поэтому вы можете смешивать и сопоставлять объекты и функции для вызова события. Примерами этого шаблона являются делегаты. Это больше подходит для стиля С#.
Шаблон наблюдателя. Вы используете интерфейс/базовый класс, который объект может реализовать и зарегистрировать этот интерфейс для мероприятие. Больше подхода стиля Java.
Проверьте ответ, который я разместил здесь для решения С++ для делегатов/внешнего полиморфизма: необработанный указатель функции из связанного метода
Ответ 6
Ваш вопрос очень общий, и наиболее общий ответ, который я могу придумать, - использовать полиморфизм, когда у вас есть проблема, требующая обратного вызова.
Полиморфизм позволяет указать контракт на программное обеспечение в виде интерфейса (или абстрактного класса) о том, как использовать ваш обратный вызов. Затем клиенты могут выбирать любую реализацию интерфейса, который они считают подходящим для своей цели.
Желательно ли использовать состояние, стратегию, шаблон наблюдателя или что-то совершенно другое, действительно зависит от обстоятельств.
Ответ 7
Хорошим описанием шаблона является шаблон дизайна обратного вызова службы. Это часть каталога шаблонов SOA, но описанный шаблон может использоваться с родовыми компонентами, которые не являются службами SOA.
Другим связанным шаблоном является Обратный шаблон адреса, описанный в классической книге "Шаблоны интеграции предприятия" Хохпе и Вульфа.
Йосуттис также рассказывает о обратном вызове в своей книге "SOA in Practice". Он называет это шаблон обмена сообщениями Request/Callback.
Ответ 8
Образец наблюдателя приходит на ум.
Один объект (suscriber) может подписываться на другой объект (издатель). Когда издатель меняет или обновляется, он может уведомить всех своих подписчиков.
В зависимости от того, какой язык вы используете, вы можете указать функцию, которая должна вызываться при уведомлении.
http://en.wikipedia.org/wiki/Observer_pattern
Это хорошо описано в Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения [Банда четырех]
Ответ 9
Я согласен с другими плакатами о шаблоне Observer. Он специально разработан для этой цели.