[英]Is n:1 observable:observer with generics possible in java? ( observer pattern )
我想聽聽你對應用觀察者模式的看法。
我的目標是實現一個可以監聽多個可觀察對象的具體觀察者類。
如果我像下面那樣開發每個不同的觀察者,那么下面就會很簡單。
public class ConcreteObserver implements EventObserverA , EventObserverB {
updateEventA(EventA event) {}
updateEvetnB(EventB event) {}
}
在這種情況下,我應該編寫許多不同的觀察者/可觀察的類/接口,里面幾乎相同的代碼片段。
為了避免像上面這樣的麻煩,我想要對觀察者進行生成/但是你們知道多重繼承規則不允許像下面這樣的代碼。
public class ConcreteObserver implements Observer<EventA> , Observer<EventB> {
update(EventA event) {}
update(EventB event) {}
}
因為我在一個具體的觀察者中至少有兩位數的Observable事件,所以我希望盡可能避免單獨實現每個觀察者/可觀察對。
我可能會猜測這種情況可能比觀察者模式有更好的模式,因為觀察者模式是為n:1觀察者設計的:可觀察的,而我的情況需要1:n觀察者:觀察者。
你們對這個案子有什么想法/建議嗎?
借助Java 8的神奇之處,您的ConcreteObserver
不一定必須實際實現Observer<EventA>
和Observer<EventB>
; 如果你寫這樣的東西:
public class ConcreteObserver {
observeEventA(EventA event) {}
observeEventB(EventB event) {}
}
然后,您可以在ConcreteObserver
實例上使用::updateEventA
或::updateEventB
來獲取可自動轉換為Observer<EventA>
或Observer<EventB>
功能接口的方法。 例如,您可以編寫以下任何內容:
Observer<EventA> eventAObserver = concreteObserver::updateEventA;
Observer<EventB> eventAObserver = new ConcreteObserver()::updateEventB;
observerRegistry.register(EventA.class, concreteObserver::updateEventA);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.