我想避免使用instanceof:
这是我的案例:
我的事件类的定义位于commons 模块中:
public class Event1 extends AbstractEvent{
}
public class Event2 extends AbstractEvent{
}
public class Event3 extends AbstractEvent{
}
在另一个名为 jms 的模块中,我有一个从队列接收事件消息的监听器:
public class MyMessageListener implements MessageListener {
@Override
public void onMessage(Message message) {
// CONVERT message to Event Object
if (event instanceof Event1) {
// Execute Processing 1
}
if (event instanceof Event2) {
// Execute Processing 2
}
if (event instanceof Event3) {
// Execute Processing 3
}
}
我想避免使用 instanceof
,而做到这一点的最佳方法是在 AbstractEvent
和每个事件中使用 execute
方法的访问者模式叶子类将实现它。
我的问题是,在公共(public)包中我无法访问负责处理的类。 这些类仅存在于 jms 模块中。
是否有任何提示或提示可以执行此操作(高级访问者)或其他模式来执行此操作
最佳答案
将所有可能的行为放入 Map<Class, Runnable>
并匹配事件类型和 Runnable
类型。
关于java - 避免使用instanceof模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27148701/