我想将观察者模式用于日志记录系统。
我们有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
都会受到影响。
但是,我还没有看到有人使用带有策略模式的观察者模式,但它似乎非常有效并且删除了重复。
您怎么看?
答案 0 :(得分:2)
支持此功能的对象从支持多重继承的语言中支持这些方法的Observable类INHERIT并不罕见。
我从来没有遇到过使用聚合来支持这个的解决方案,这就是你所描述的,但鉴于PHP不支持多重继承,这对我来说听起来像是一个合理的解决方法。
答案 1 :(得分:0)
现在您可以使用Traits并在一个特征中定义observAbles方法。