【问题标题】:Call methods on an object that will be created by other users调用将由其他用户创建的对象的方法
【发布时间】: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


【解决方案1】:

这两种设计模式都应该完成任务:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多