стратегия для наблюдателя? - PullRequest
3 голосов
/ 06 мая 2010

Я хочу использовать шаблон наблюдателя для системы регистрации.

У нас есть logObservers и logObservables.

Класс, который должен что-то регистрировать, реализует iLogObservable и включает в себя следующие методы:

private $logObservers = array();

public function addLogObserver($logObserver) {
    $this->logObservers[] = $logObserver;
}
public function removeLogObserver($logObserver) {
    this->logObservers[] = $logObserver;
}
public function write($type, $message) {
    foreach($this->logObservers as $logObserver) {
        $logObserver->log($level, $message);
    }
}

Затем я заметил, что многие классы, которые будут использовать ведение журнала, будут иметь эти методы, и мне нужно скопировать вставить. Поэтому не лучше ли иметь эти методы в классе, который я называю LogObservable, или просто Log, а затем использовать стратегию (создать экземпляр этого класса во всех классах, которые должны будут регистрироваться). Когда я изменю методы в Log, будут затронуты все logObservables.

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

Что вы думаете?

Ответы [ 2 ]

2 голосов
/ 06 мая 2010

Это не является необычным для объекта, который поддерживает эту функциональность для наследования из класса Observable, который поддерживает эти методы, в языках, которые поддерживают множественное наследование.

Я никогда не сталкивался с решением, которое использует агрегацию для поддержки этого, и это то, что вы описываете, но, учитывая, что PHP не поддерживает множественное наследование, это звучит как разумный обходной путь для меня.

0 голосов
/ 26 февраля 2013

Теперь вы можете использовать черты и определять методы наблюдателя в одной черте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...