One*_*ero 5 java architecture design-patterns
在生产代码中,我经常看到如下定义的类:
public interface SomeComponent { // Some methods }
public class SomeComponentImpl implements SomeComponent { // Some methods}
public interface SomeComponentV2 extends SomeComponent { // Some methods }
public class SomeComponentV2Impl extends SomeComponentImpl implements SomeComponent { // Some methods }
Run Code Online (Sandbox Code Playgroud)
为什么在这种情况下我们要分离接口及其实现?
或者这样说,为什么简单地有一个基类,让V2扩展/覆盖V1如下:
public class SomeComponent { // Some methods }
public class SomeComponentV2 extends SomeComponent
{
// Override methods for reimplementation
// Add new methods for new features.
}
Run Code Online (Sandbox Code Playgroud)
将接口与实现分离可以充分利用多态性。这样,SomeComponentV2Impl 将具有 3 种类型 - 自己的类型、基类和接口。在这里,您可以只使用接口,而不关心它在其他类中的实现。例如:
public void methodInOuterClass(SomeComponent smCmp){
smCmp.runInterfaceMethods();
}
Run Code Online (Sandbox Code Playgroud)
[编辑:这个问题出现在编辑之前的OP问题中]
为什么我们不为它们全部使用一个基类?
因为SomeComponentV2Impl 与SomeComponentImpl 是有区别的。但如果它们实现相同的接口,您将能够从接口的引用中调用它们的实现。
归档时间: |
|
查看次数: |
2151 次 |
最近记录: |