java - 避免使用instanceof模式

标签 java oop design-patterns

我想避免使用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/

相关文章:

java - tomcat 服务器 : Is Tomcat server must be restarted everyday?

java - 先后在Android中运行Handler Task

oop - 将多种数据格式从多个来源转换为单一格式的设计模式

javascript - 通过引用将 JavaScript 数组传递给局部变量?

php - 未定义索引 - 安全风险与性能与代码膨胀

java - 存储请求标记并在以后针对特定请求使用它吗?

java - 安全证书-了解CA在代码签名中的角色

java - Processing 3.0 方法 PVector.get() 已弃用

c++ - GetFirst 和 GetNext 调用以从持久类中获取记录

c# - 决定选择何种 SQL 查询的设计模式