java - 具有不同参数的事件通知的最佳模式是什么?
问题描述
我正在寻找以下(方法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<Foo> 和 Consumer<Bar>。
事件提供者将实现类似 addFooListener(Consumer<Foo> listener) {...}
处理程序可能有 public void handleFoo(Foo foo) {...}
并且设置代码将初始化 provider.addFooListener(somehandler::handleFoo);
推荐阅读
- java - 将消息从死信移回主题
- python - 在 tensorflow 中使用纯张量样式(无馈送)实现强化学习?
- react-select - React Select IE 11 - TypeError:对象不支持属性或方法“分配”
- macos - macOS size 命令显示的数字真的很大吗?
- javascript - 有没有办法使用 Nodejs 从 Swagger 文件中检索所有参数(甚至是嵌套的或数组中的)?
- npm - 临时将 npm 配置 'audit-level' 设置为 'critical'
- nginx - 502 使用 nginx 服务器时网关错误
- angular - 在导入中使用服务方法的打字稿
- reactjs - 条件渲染适用于无状态功能组件,但不适用于有状态
- python - Python Dataframe 使用 groupby 在扩展/运行范围内应用函数