在应用此模式的委托事件模型时,将所有代码放入fire...方法并从public方法传递参数是否正确?

像这样

public void addBananas(Banana banana) {
    fireBananaAdded(banana);
}

private void fireBananaAdded(Banana banana) {
    //Create event etc and add banana to list here
}


还是应该在本例中的addBananas方法中使用“添加到列表”部分?因为如果以这种方式进行操作,我将没有机会将香蕉对象“附加”到将传递给侦听器的事件对象上,对吗?

最佳答案

我会在addBanana()中尽可能多地添加与实际添加香蕉有关的逻辑。

当我用完addBanana()时,我会调用fireBananaAdded(),它将生成适当的BananaAddedEvent并将其发送到BananaAddedListeners(或只是BananaListeners,无论您使用的是哪个)。

将BADNAS逻辑添加到FIRE方法很简单!

public void addBananas(Banana banana) {
    if(BananaHolder.hasRoom()) {
        BananaHolder.add(banana);
        fireBananaAdded(banana);
    }
}

private void fireBananaAdded(Banana banana) {
    BananaAddedEvent event = new BananaAddedEvent(banana);
    for(BananaListener listener : listenersByType(Banana.class)) {
        listener.bananaAdded(event);
    }
}

07-24 21:44