Разделение двух классов для уведомлений

Я просто смотрел в рамки Poco. У меня есть еще один базовый фреймворк, который уже использовал фреймворк Poco и абстрагирует некоторые его части, чтобы сделать его еще проще.

Я хочу объяснить проблему простым сценарием:
Учтите, что в моей программе есть объект в форме прямоугольника. Форма имеет частный hit Testing методы внутри него и при тестировании на попадание в течение определенного времени, я должен был вызвать функцию в другом классе, т.е. Fountain учебный класс.

Мне не нужно передавать какую-либо конкретную информацию об объекте формы в функцию в Fountation учебный класс. Моя структура уже дает мне некоторые функциональные возможности NotifyEvent а также AddListener, Если бы я использовал этот подход, в моем классе формы было бы событие, которое было бы подписано в фонтане Add Listener (объект, если передана форма) и событие уведомление из класса формы.

Теперь, с помощью центра уведомлений Poco, вместо передачи ссылки на объект shape в базовый класс, я передам NotificationCenter ссылка на второй класс. fountain класс будет иметь наблюдателя, и наблюдатель будет уведомлен от postNotification()
Единственное различие, которое я вижу здесь между двумя подходами, заключается не в передаче информации об определенном объекте.
Я просто более свежий разработчик, пытающийся по возможности выучить хорошие практики кодирования, и не совсем понимаю, как здесь развязаться. Как эти два класса разделены здесь? (потому что я не прохожу shape объект и просто используя notificationcenter объект?)

РЕДАКТИРОВАТЬ: Добавление к вышеупомянутому вопросу. Допустим, у меня есть 10 других классов, которые должны прослушивать определенное уведомление, поэтому мне придется передать ссылку на Notification Center ко всем этим классам, а? Только так я смогу добавить наблюдателя для центра уведомлений в мои классы.

2

Решение

В основном да. Если Fountain класс знает только о NotificationCenterто это не связано с формой (Rectangle или другие) больше. Это предполагает, что уведомление, отправленное формами, также не зависит от объекта, который его запускает.

Редактировать: ответ на ваши изменения — да, вам нужно позвонить addObserver метод с каждым объектом, который нуждается в уведомлениях

1

Другие решения

Что вам нужно сделать, так это разделить процесс отправки и получения сообщений на структуру Observer — Listener. Это называется Шаблон наблюдателя. Вы можете прочитать более подробную информацию об этом шаблоне Вот. Это избавит вас от необходимости иметь дело с несколькими ссылками и событиями, а также от размышлений о реализации отправки / получения сообщений каждый раз, когда вам нужно добавить сообщение в другой класс.

Вы можете найти больше информации о шаблонах дизайна в книге Шаблоны проектирования. Элементы многоразового объектно-ориентированного программного обеспечения.

1

По вопросам рекламы [email protected]