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

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

25
задан 3 June 2009 в 19:56
поделиться

8 ответов

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

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

22
ответ дан 28 November 2019 в 18:32
поделиться

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

Все шаблоны проектирования связаны с сообщением о вашем намерении.

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

Если вы намеревались передать «что-то сделать», и это выполняется в методе (или используется для «выполнения чего-то» в более позднем процессе), вы Говорящая стратегия. Кроме того, обычно происходит сам вызов.

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

16
ответ дан 28 November 2019 в 18:32
поделиться

обратный вызов - это форма шаблон проектирования стратегии

8
ответ дан 28 November 2019 в 18:32
поделиться

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

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

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

4
ответ дан 28 November 2019 в 18:32
поделиться

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

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

6
ответ дан 28 November 2019 в 18:32
поделиться

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

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

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

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

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

0
ответ дан 28 November 2019 в 18:32
поделиться

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

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

1
ответ дан 28 November 2019 в 18:32
поделиться

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

0
ответ дан 28 November 2019 в 18:32
поделиться