Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Это будет Шаблон наблюдателя - Из Википедии
Шаблон наблюдателя (подмножество асинхронная публикация / подписка pattern) - это шаблон проектирования программного обеспечения в котором объект, называемый субъект, ведет список своих иждивенцы, называемые наблюдателями, и уведомляет их автоматически о любых изменения состояния, обычно вызывая один их методов. В основном используется для реализовать распределенную обработку событий систем.
Это зависит от того, как используется обратный вызов.
Все шаблоны проектирования связаны с сообщением о вашем намерении.
Если вы намеревались разрешить один или несколько обратных вызовов для быть зарегистрированными, и их можно назвать уведомлением «в какой-то момент в будущем», вы говорите, Наблюдатель. Также - фактический вызов обратного вызова в этом случае обычно «необязательный» или запускается на основании некоторого стимула. (Обратные вызовы могут быть вызваны, а могут и не вызываться)
Если вы намеревались передать «что-то сделать», и это выполняется в методе (или используется для «выполнения чего-то» в более позднем процессе), вы Говорящая стратегия. Кроме того, обычно происходит сам вызов.
Обратите внимание, что один и тот же код может быть любым - он действительно о том, как вы думаете о проблеме и как вы хотите, чтобы другие думали об этом.
обратный вызов - это форма шаблон проектирования стратегии
Внешний полиморфизм - объект имеет ссылку на другой объект и функцию для вызова этого объекта. Его можно рассматривать как единый тип, поэтому вы можете смешивать и сопоставлять объекты и функции, вызываемые для события. Делегаты являются примером этого шаблона. Это больше похоже на подход в стиле C #.
Шаблон наблюдателя - Вы используете интерфейс / базовый класс, который объект может реализовать и зарегистрировать этот интерфейс для события. Скорее подход в стиле Java.
Проверьте ответ, который я опубликовал здесь, для решения C ++ для делегатов / внешнего полиморфизма: необработанный указатель на функцию из связанного метода
Несколько. Посмотрите 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
Шаблон стратегии: http://en.wikipedia.org/wiki/Strategy_pattern
Наиболее подходящий будет зависеть от ситуации. Какой язык программирования вы хотите использовать и что именно хотите делать?
На ум приходит паттерн наблюдателя.
Один объект (подписчик) может быть связан с другим объектом (издателем). Когда издатель меняет или обновляется, он может уведомить всех своих подписчиков.
В зависимости от того, какой язык вы используете, вы можете указать функцию, которая должна вызываться при уведомлении.
http://en.wikipedia.org / wiki / Observer_pattern
Это хорошо описано в Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения [Банда четырех]
Ваш вопрос очень общий, и наиболее общий ответ, который я могу придумать, - использовать полиморфизм, когда у вас есть проблема, требующая обратного вызова.
Полиморфизм позволяет вам чтобы указать программный контракт в форме интерфейса (или абстрактного класса) о том, как будет использоваться ваш обратный вызов. Затем клиенты могут выбрать любую реализацию интерфейса, которую они считают подходящей для своих целей.
Я также согласен с другими плакатами о шаблоне наблюдателя. Он специально разработан для этой цели.