在生产代码中,我经常看到定义如下的类:
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 }
为什么在这种情况下我们要分离接口和它的实现呢?
或者这样说,为什么只拥有一个基类并让 V2 扩展/覆盖 V1 是不好的,如下所示:
public class SomeComponent { // Some methods }
public class SomeComponentV2 extends SomeComponent
{
// Override methods for reimplementation
// Add new methods for new features.
}
将类的接口和实现分开是一个很好的做法,因为您可以轻松地交换类。
想象一下,您想要测试一个依赖于 Web 服务的应用程序,该服务会针对每个请求向您收费。除了拥有一个对该 Web 服务执行真实请求的类之外,您还可以构建一个实现相同接口但返回虚假数据的类,以避免为每个请求产生成本。
每次从基类继承时,您都有可能继承您不想继承的行为。接口是一个纯粹的契约,让您可以自由地选择基类,而与所描述的优点无关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)