在我的系統我有2分的情況:如何用CDI Events實現觀察者模式?
- 組分X產生被用Y觀察到的事件
- 組分X產生應由部件的F.F被觀測到的事件決定是否事件應該被忽略或修改並將其傳遞到Y
是否有可能與CDI事件來實現呢?
在我的系統我有2分的情況:如何用CDI Events實現觀察者模式?
是否有可能與CDI事件來實現呢?
CDI只供應商能力的廣播風格/主題活動。 CDI中沒有事件過濾。
我能想到做等價的唯一辦法就是拿出一個限定詞。也許F
可以@Observes @A @B SomeObject
而Y
可以@Observes @C @B SomeObject
。當F
獲得一個事件時,它可以使用@C @B
作爲限定符來重新使用它。
我會嘗試建立某種形式的事件生產者和事件消費者之間的代理:
class EventProducer{
@Inject private Event<EventObject> event;
public void produce(){
event.fire(new EventObject());
}
}
代理:
class EventsProxy{
@Inject private Event<EventObjectForY> event_1;
@Inject private Event<EventObjectForF> event_2;
void observe(@Observes EventObject){
if(eventObjectEligibleForF()){
EventObjectForF f = copyEventObjectToEventObjectForF();
event_2.fire(f);
}
EventObjectForY y = copyEventObjectToEventObjectForY();
event_2.fire(y);
}
}
消費者:
class EventConsumer{
public consume(@Observes EventObjectForY obj){
}
}
但請記住,這只是僞代碼。
這是很好的解決方案,但是當我們意識到只有一個場景它的工作原理。我想實現這兩個並啓用一個配置。 – Karol
配置完全取決於您。 –