定义抽象对象的实现

时间:2009-07-27 12:02:24

标签: java class dependency-injection abstraction

我正在寻找以下方法:

项目: 定义在某些事件发生时调用的抽象类(如果您愿意,则调用事件处理程序) 使用上面的事件处理程序定义将触发事件的引擎

B项目: 定义抽象类的实现 运行引擎。

如何注册实现类并确保在引擎运行时调用它。

编辑1:通过注册我的意思是我必须以某种方式定义哪个是应该为给定的抽象对象调用的实现

很抱歉,如果问题不太明确,请告诉我您是否需要更多详情

3 个答案:

答案 0 :(得分:2)

这样的东西?

class A implements EventHandlerForB {
...
}

public class B {
  private EventHandlerForB eventHandler;

  public void registerEventHandler(EventHandlerForB eventHandler) {
    this.eventHandler = eventHandler;
  }
...
}

public interface EventHandlerForB {
...
}

答案 1 :(得分:1)

在运行时,您可以在A项目中传递实现的名称(具有属性文件或Java系统属性)。 然后,您在类路径中找到具有class.forName()的此类,并使用newInstance()对其进行实例化。

但你更喜欢使用像Guice或Spring这样的框架,它可以让你以干净的方式将各种东西粘在一起。

答案 2 :(得分:0)

有几种“模式”试图解决这个问题。仅使用JDK(6或以上)课程,您可能需要查看java.util.ServiceLoader