从类中提取核心功能

时间:2015-08-03 23:29:50

标签: java inheritance design-patterns

我有一个公共课A。该类将在客户端和服务器端使用。但是在服务器端,它将暴露较少的API(客户端环境特定的API将不存在)。因此,我将这两种环境共有的核心API提取为一个抽象的隐藏超类ASuper。这就是将A分为AASuper
我所面临的问题是许多核心API都返回<T extends A>类型的对象。因此,超类正在引用其子类,这是违反继承原则的。我不想覆盖A中的每个这样的API(由于大量的这些API)。我也不想将方法签名更改为<T extends ASuper>。有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:0)

嗯,正确的解决方案将是您尝试避免的 - 改变签名。更好的是,从ASuper中提取界面并使您的API返回此界面而不是具体实现。

但是,如果您需要一些解决方法,我只能对此方法进行映像:而不是提取超类ASuper提取子类AChild。在这种情况下,您现有的方法将返回超类A而不是子类。稍后您可以重命名父类和子类(我希望您的IDE支持这种重构)。

答案 1 :(得分:0)

你不应该将ASuper重构为A的超类,因为正如你所指出的那样会创建一个糟糕的继承结构。您应该遵循Composition over inheritance的主体并将ASuper的实例传递给A的构造函数。