【问题标题】:Template pattern extension for subclasses with additional methods具有附加方法的子类的模板模式扩展
【发布时间】:2014-03-13 18:48:10
【问题描述】:

最好用一个例子来解释:

interface Plane {
    public void flapsExtended();
    public void engineFullThrottle();
    public void takeOff();
    public void landed();
}


class Spitfire implements Plane {
}

class P51Mustang implements Plane {
}

到目前为止,我的代码做得很好。但是随着二战的结束,我们从来没有配备可伸缩起落架的喷气式飞机。 所以我为 F22 添加了一个新类,需要在takeOffland 阶段之间添加retractLandingGear()extendLandingGear

示例:

class F22 {
        public void flapsExtended();
        public void engineFullThrottle();
        public void takeOff();
        public void retractLandingGear();
        public void extendLandingGear();
        public void landed();
}

现在我如何将 F22 与那些遗留代码(和遗留平面 :))连接起来?

【问题讨论】:

  • 创建一个interface ModernPlane extends Plane 并向其中添加其他方法?尽管如果您以Plane 的身份访问 F-22,您仍然将无法访问新方法...

标签: java templates design-patterns


【解决方案1】:

如果您完全控制所有代码并且能够修改它,只需修改旧类,以便新方法执行无操作。

但是,如果您无法修改旧类,则必须使用额外的方法创建一个新的子接口,并执行 instanceof 检查以查看您正在处理的对象使用哪个版本的接口,然后进行转换相应地。

当您可以向接口添加默认实现时,这个问题将在 Java 8 中得到解决。

【讨论】:

    猜你喜欢
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多