簡體   English   中英

n:1是否可觀察:java中可能存在泛型的觀察者? (觀察者模式)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM