我正在寻找以下模式(方法 1)的替代模式:
public interface IEventListener {
void onFoo(String string, Integer integer, ObjectB objectB);
void onBar(Double d, ObjectA objectA);
}
我在想这样的事情(方法2):
public interface IEventListener {
void onEvent(Event event);
}
public enum EVENT_TYPE {
FOO, BAR
}
public abstract class Event {
EVENT_TYPE type;
abstract EVENT_TYPE getType();
}
public class FooEvent extends Event {
private String string;
private Integer integer;
private ObjectB objectB;
@Override
EVENT_TYPE getType() {
return EVENT_TYPE.FOO;
}
}
public class BarEvent extends Event {
private Double d;
private ObjectA objectA;
@Override
EVENT_TYPE getType() {
return EVENT_TYPE.BAR;
}
}
但我不确定它如何易于使用。 为了处理该事件,我需要检查事件类型并将事件转换为正确的事件,等等。
也许方法1没有其他选择?
最佳答案
远离共同的祖先,直到你有明确的理由来处理抽象事件(例如一些日志记录、计时、排队、序列化等......)。
将监听器编码为 lambda 也简单得多。您最好实际上考虑一下监听器的类,例如 Consumer
事件提供者会实现类似的东西
addFooListener(Consumer
处理程序可能有 公共(public)无效handleFoo(Foo foo){...}
并且设置代码将初始化 provider.addFooListener(somehandler::handleFoo);
关于java - 具有不同参数的事件通知的最佳模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64529112/