观察者模式的策略?

时间:2010-05-06 13:33:55

标签: design-patterns oop

我想将观察者模式用于日志记录系统。

我们有logObserverslogObservables

必须记录某些内容的类将实现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 个答案:

答案 0 :(得分:2)

支持此功能的对象从支持多重继承的语言中支持这些方法的Observable类INHERIT并不罕见。

我从来没有遇到过使用聚合来支持这个的解决方案,这就是你所描述的,但鉴于PHP不支持多重继承,这对我来说听起来像是一个合理的解决方法。

答案 1 :(得分:0)

现在您可以使用Traits并在一个特征中定义observAbles方法。