Я хочу использовать шаблон наблюдателя для системы регистрации.
У нас есть 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
.
Однако я еще не видел, чтобы кто-то использовал шаблон наблюдателя с шаблоном стратегии, но, похоже, он очень эффективен и устраняет дубликаты.
Что вы думаете?