Java 定义抽象对象的实现
我正在寻找一种方法来实现以下目标: 项目: 定义在某些事件发生时调用的抽象类(如果愿意,则定义事件处理程序) 定义将使用上面的事件处理程序触发事件的引擎 B项目: 定义抽象类的实现 启动引擎 如何注册实现类并确保在引擎运行时调用该实现类 编辑1:我的意思是我必须以某种方式定义应该为给定抽象对象调用的实现 抱歉,如果问题不太清楚,请告诉我您是否需要更多的详细信息类似的信息Java 定义抽象对象的实现,java,class,dependency-injection,abstraction,Java,Class,Dependency Injection,Abstraction,我正在寻找一种方法来实现以下目标: 项目: 定义在某些事件发生时调用的抽象类(如果愿意,则定义事件处理程序) 定义将使用上面的事件处理程序触发事件的引擎 B项目: 定义抽象类的实现 启动引擎 如何注册实现类并确保在引擎运行时调用该实现类 编辑1:我的意思是我必须以某种方式定义应该为给定抽象对象调用的实现 抱歉,如果问题不太清楚,请告诉我您是否需要更多的详细信息类似的信息 class A implements EventHandlerForB { ... } public class B {
class A implements EventHandlerForB {
...
}
public class B {
private EventHandlerForB eventHandler;
public void registerEventHandler(EventHandlerForB eventHandler) {
this.eventHandler = eventHandler;
}
...
}
public interface EventHandlerForB {
...
}
有几种“模式”试图解决这个问题。在运行时只使用JDK(6或更高版本)类,就可以在项目中传递实现的名称(使用属性文件或Java系统属性)。 然后使用
class.forName()
在类路径中找到这个类,并使用newInstance()
实例化它
但您更喜欢使用像或Spring这样的框架,它将允许您以一种干净的方式将内容粘合在一起。您所说的“注册实现类”是什么意思?据我所知(也许您可以给出一些更详细的说明,例如Pesudo代码)您必须将实际的B项目实现实例化为对a项目抽象类的引用。传递它时,认为构造函数可能更适合单播。此解决方案确实需要我对调用处理程序的类进行编码,但我没有这样做。使用您的对象,在我的问题中,类B将被关闭,类A将是我实现的。我实现的解决方案基于您的第一个建议,我看过Guice,可能最终会使用它,但现在这已经足够了