Подтвердить что ты не робот

Существует ли шаблон проектирования, который имеет дело с механизмом обратного вызова?

Существует ли шаблон проектирования, который имеет дело с механизмом обратного вызова?

4b9b3361

Ответ 1

Это будет шаблон наблюдателя - из Википедии

Шаблон наблюдателя (подмножество асинхронный публикация/подписка шаблон) является шаблоном проектирования программного обеспечения в котором объект, называемый субъект, ведет список своих иждивенцев, называемых наблюдателями, и автоматически уведомляет об этом изменения состояния, обычно путем вызова одного их методов. Он в основном используется для осуществлять распределенную обработку событий системы.

Ответ 2

Это зависит от того, как используется обратный вызов.

Шаблоны проектирования - все о том, как сообщить о своих намерениях.

Если вы планируете регистрировать один или несколько обратных вызовов и их можно назвать уведомлением "в какой-то момент в будущем", вы говорите Observer. Также - фактический вызов обратного вызова в этом случае обычно "необязателен" или инициируется на основе некоторого стимула. (Обратные вызовы могут или не могут быть вызваны)

Если вы намеревались передать "что-то делать", и это делается в методе (или используется для "чего-то" во время более позднего процесса), вы говорите "Стратегия". Также - фактическое обращение обычно происходит.

Обратите внимание, что один и тот же код может быть либо - он действительно о том, как вы думаете о проблеме, так и о том, как вы хотите, чтобы другие думали об этом.

Ответ 3

обратный вызов представляет собой шаблон стратегии разработки

Ответ 4

Несколько. Проверьте http://people.bu.edu/azs/teaching/cs108/2006fall/callback_pattern.pdf и следующее:

Наиболее подходящее будет зависеть от ситуации. Какой язык программирования вы хотите использовать и что вы хотите сделать точно?

Ответ 5

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

Шаблон наблюдателя. Вы используете интерфейс/базовый класс, который объект может реализовать и зарегистрировать этот интерфейс для мероприятие. Больше подхода стиля Java.

Проверьте ответ, который я разместил здесь для решения С++ для делегатов/внешнего полиморфизма: необработанный указатель функции из связанного метода

Ответ 6

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

Полиморфизм позволяет указать контракт на программное обеспечение в виде интерфейса (или абстрактного класса) о том, как использовать ваш обратный вызов. Затем клиенты могут выбирать любую реализацию интерфейса, который они считают подходящим для своей цели.

Желательно ли использовать состояние, стратегию, шаблон наблюдателя или что-то совершенно другое, действительно зависит от обстоятельств.

Ответ 7

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

Другим связанным шаблоном является Обратный шаблон адреса, описанный в классической книге "Шаблоны интеграции предприятия" Хохпе и Вульфа.

Йосуттис также рассказывает о обратном вызове в своей книге "SOA in Practice". Он называет это шаблон обмена сообщениями Request/Callback.

Ответ 8

Образец наблюдателя приходит на ум.

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

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

http://en.wikipedia.org/wiki/Observer_pattern

Это хорошо описано в Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения [Банда четырех]

Ответ 9

Я согласен с другими плакатами о шаблоне Observer. Он специально разработан для этой цели.