Использование шаблона Observer: метод update () - PullRequest
1 голос
/ 27 июня 2011

Привет У нас (друга и я) есть разные источники (содержимое вики, комментарии на форумах, загрузка документов, источники RSS ...), о которых мы хотим сообщить в нашей будущей системе в разных выходах: Javascript LIVE PUSH (APE),почта, SMS, телефон, RSS ...

Мы думаем о шаблоне проектирования GoF Observer для нашей реализации.Является ли шаблон проектирования Observer хорошим способом для достижения этой цели?

Мы думаем о том, чтобы Observer поместил код для форматирования сообщения, подлежащего уведомлению (см. Пример 1), но, возможно, мы вернем статус в Observable для того, чтобысоздать сообщение (см. пример 2).Является ли это хорошей практикой в ​​отношении шаблона?

, если да, какова "реальная роль" update () (метод шаблона проектирования Observer по умолчанию)?На самом деле мы этого не понимаем.

Мы нашли эти примеры в Интернете (для реализации update ())

1) http://gbenoit79.blogspot.com/2011/04/design-pattern-observer.html

<?php
(...) 
class ConcreteObserverA implements SplObserver
{
    public function update(SplSubject $subject)
    {
        echo 'ConcreteObserverA received: ' . $subject->getVariable() . "\n";
    }
}
(...)

2) http://www.minte9.com/kb/php-observer-pattern-example-php-programming-advanced-i1365

<?php
(...)
  class DriverObserver implements Observer{
    public function update(Observable $subject) {
      if ($subject->driven_hours >= 8) {
        $subject->need_sleep = 1;
      } else {
        $subject->need_sleep = 0;
      }
    }
  }
(...)

Они оба действительны?

1 Ответ

1 голос
/ 27 июня 2011

Без дополнительных подробностей нелегко сказать, является ли шаблон Observer хорошим решением, однако он может быть правильным. Наблюдатель - это объект, наблюдающий за другими объектами, которые называются субъектами. Когда происходит изменение в каком-либо предмете, он уведомляет своих наблюдателей об обновлении своего состояния. К вашему примеру: Ваши темы - это содержимое вики, комментарии на форумах, загрузка документов, источники RSS ... а вашими наблюдателями являются Javascript LIVE PUSH (APE), почта, SMS, телефон, RSS ... Вы должны написать абстрактный класс для субъектов, которые должны содержать коллекцию объектов Observer, а также методы для добавления в эту коллекцию, удаления из нее и некоторые методы для выбора наблюдателей для уведомления. Конкретные реализации Observable могут вызвать обновление выбранных наблюдателей с некоторыми данными сообщения в качестве аргументов. Чем вам нужен интерфейс Observer, который будет иметь метод обновления, который вызывается при обновлении тем. Конкретные реализации в этом методе обновления будут отправлять электронные письма, отправлять сообщения в Интернет или отменять регистрацию, что угодно. После того, как это закодировано, вы инициализируете общение, создавая Наблюдатели, затем предметы и добавляя наблюдателей к темам.

...