java – API和实现之间的分离是否应该完全分开?
发布时间:2020-12-14 05:24:58 所属栏目:Java 来源:网络整理
导读:在大型软件实现中,通常建议在API设计与其实现之间进行分离.但在某些地方,它们必须重新连接(即,必须将实现重新连接到API). 以下示例显示了API设计以及通过INSTANCE对象调用其实现: import java.util.List;public abstract class Separation { public static
在大型软件实现中,通常建议在API设计与其实现之间进行分离.但在某些地方,它们必须重新连接(即,必须将实现重新连接到API).
以下示例显示了API设计以及通过INSTANCE对象调用其实现: import java.util.List; public abstract class Separation { public static final Separation INSTANCE = new SeparationImpl(); // Defining a special list public static interface MySpecialList<T> extends List<T> { void specialAdd(T item); } // Creation of a special list public abstract <T> MySpecialList<T> newSpecialList(Class<T> c); // Merging of a special list public abstract <T> MySpecialList<? extends T> specialMerge( MySpecialList<? super T> a,MySpecialList<? super T> b); // Implementation of separation public static class SeparationImpl extends Separation { @Override public <T> MySpecialList<T> newSpecialList(Class<T> c) { return ...; } @Override public <T> MySpecialList<? extends T> specialMerge( MySpecialList<? super T> a,MySpecialList<? super T> b) { return ...; } } } 有人会争辩说API不应该引用实现代码.即使我们通过单独的文件将API代码与实现分开,也经常需要在API中导入实现代码(至少是类名). 有些技术可以通过使用完全限定名称的字符串表示来避免此类引用.该类加载该字符串,然后进行实例化.它使代码更复杂. 我的问题:将API代码从实现代码中完全分离或隔离是否有任何好处?或者这只是纯粹主义者试图达到完美而没有什么实际好处? 解决方法
我一直都理解将接口与实现分开的要求意味着你不要将实现方式与实现方式混为一谈.因此,在上面的示例中,混合api和实现将意味着在api中暴露特定于SeparationImpl如何实现api的东西.
作为示例,请查看如何在各种集合类中实现迭代.您可以使用更具体的方法检索特定集合中的元素(例如,通过ArrayList中的位置),但这些方法不会在Collection中公开,因为它们特定于具体ArrayList的实现方式. 我还看到了具有巨大接口目录的项目,每个接口都有一个具体的实现,并且每个接口都在机械上重现每个方法的具体实现,这似乎是一个完全没有意义的“假装”抽象,因为它实际上并没有提供任何逻辑抽象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |