我想爲觀察系統使用觀察者模式。觀察者模式的策略?
我們有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
都將受到影響。
不過,我還沒有看到任何人因使用與策略模式觀察者模式還,但它似乎是非常有效的去除重複。
您認爲如何?
php不支持多重繼承。我只能延長一次。那是你所指的?但如果我使用「擴展」,它不能再擴展其他類,而需要日誌的類通常會擴展其他類。我想我不能擴展LogObservable只是因爲一個類需要日誌記錄功能,然後所有的類將擴展這個,因此不能擴展其他。 – 2010-05-06 13:41:15
Fayer,對。在許多其他語言中(例如C++,Python和可論證的Java),您可以從多個類中擴展,這對於這種情況來說非常合適。但是,你不能在PHP中,所以使用聚合而不是(如你所描述的)是第二好的解決方案。但我不會將其描述爲「戰略模式」,因爲沒有一系列可以彙總的替代方案 - 僅此一項。 – Oddthinking 2010-05-06 14:04:32
我想它是唯一的方法:) – 2010-05-06 14:11:18