2009-07-27 112 views
1

我正在寻找一种方式来做到以下几点:定义实现的抽象对象

项目: 定义当一些事件发生的被称为抽象类(事件处理程序,如果你会) 定义引擎将使用以上事件处理程序触发事件

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

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

编辑1:通过寄存器我的意思是我必须以某种方式确定哪些是应该呼吁给定的抽象对象

如果对不起这个问题不是太清楚的实施,让我知道如果你需要更多一些细节

+0

“注册实施类”是什么意思? – 2009-07-27 12:04:07

+0

据我了解(也许你可以给一些更多的澄清,例如Pesudo代码),你将不得不实例化实际的B项目实现作为对A项目抽象类的引用。 – Daff 2009-07-27 12:15:55

回答

1

在运行时,您可以在A项目(具有属性文件或Java系统属性)中传递实现的名称。 然后你在类路径中找到这个类,并且用newInstance()将它实例化为class.forName()

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

2

是这样的?

class A implements EventHandlerForB { 
... 
} 

public class B { 
    private EventHandlerForB eventHandler; 

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

public interface EventHandlerForB { 
... 
} 
+0

通过它认为构造函数可能更好的单播。 – 2009-07-27 14:24:38

+0

这个解决方案确实需要我编写调用处理程序的类,我不这样做。使用你的对象,在我的问题类B中将被关闭,类A将是我实现的。 – 2009-07-27 17:35:41

0

有几个“模式”试图解决这个问题。仅使用JDK(6或更高版本)类,您可能需要查看java.util.ServiceLoader