【发布时间】:2014-08-12 20:58:18
【问题描述】:
如何确保我的类能够在其他用户定义的对象上调用我定义的方法。
我按照正确的设计模式构建了我的代码。在层次结构的顶部有一个由多个类扩展的抽象类,其他用户将能够扩展顶级类。
在工厂类中,顶级类的一些方法被我和其他用户创建的类的实例调用。但是我不知道这些类是如何被用户调用的,我怎么能在工厂类中调用它们的方法呢?
-
CarGenerator(在顶部) -
BlueBiggerCar[扩展 CarGenerator] -
SmallGreenCar[扩展 CarGenerator] -
RedCar[扩展 CarGenerator] ...
我让用户可以添加扩展CarGenerator 的新类,并在工厂类ScreenFactory 上作为示例将汽车放置在屏幕上。
在ScreenFactory的工厂里会有类似的东西:
new SmallGreenCar().appearOnScreen(); //A small green car appears on the screen.
但是当我的代码发布时,用户将添加新车作为对象,在这种情况下,如果我无法在工厂中创建它们的实例,这些汽车将如何出现在屏幕上?我可能对代码的结构有误,但我不明白如何修复。
【问题讨论】:
-
请用一些代码澄清你的问题。如果该方法在超类中是抽象的,您可以在您的类中调用它,并依赖于必须有一个具体实现才能让某人向您传递该实例这一事实。
-
听起来您的用户应该实现您提供的接口。这样,您就知道这些方法,因为您定义了它们的类型。但是,你应该修改这个问题,也许提供一个例子。目前,不清楚您在问什么。
-
public abstract void appearOnScreen()。完成。 -
@ElliottFrisch 看看上面的一些代码,也许会更清楚。
-
您正在寻找一种动态扩展工厂类的方法 - 这可以通过为给定标识符注册
Class<T extends BaseClass>并通过Class.newInstance()创建类来实现,但我没有遇到过(严重) 需要这样做的情况。
标签: java inheritance design-patterns reflection