【发布时间】:2013-09-26 10:26:20
【问题描述】:
对于我当前的项目,我正在为 java File 类制作一个包装器,以及一个路径 String 的包装器(即C:\Users\Public\)。
让我们调用 File 类的包装器 FileWrapper 和路径的包装器 PathWrapper。
FileWrapper显然必须有一个路径:FileWrapper的File在磁盘上的位置。现在我的问题是...
FileWrapper 应该包含 PathWrapper 类型的字段(以及 PathWrapper 的 PathWrapper.getPath() 的访问器方法),还是应该扩展 PathWrapper,从而继承 getPath() 方法?
我遇到的问题是FileWrapper,严格来说,不是Path。这只是一个文件。但在这种情况下,无论如何只使用继承似乎更简单。
我正在考虑的第二种解决方案还有另一个问题(在FileWrapper 中创建一个getPath() 方法)。我想创建一个FileWrapper 和PathWrapper 都将实现的Path 接口,以便允许FileWrappers 和PathWrappers 的通用列表。
如果FileWrapper 是PathWrapper 的子类,则不需要此接口。
【问题讨论】:
-
java.io.File没有获取路径和/或绝对路径的方法吗?如果您的FileWrapper.class是File的包装器,那么只需在本机调用该方法...不是吗? -
FileWrapper.getPath() 将返回一个 PathWrapper 实例,其中包含一些花哨的方法,例如用于检查给定 PathWrapper 是否位于另一个 PathWrapper 定义的文件夹中的方法。
-
反过来也很方便
PathWrapper.getFile()。 -
如果您想要的行为比您对该行为的实现更具体或更广为人知,或者如果您可以预期多种实现方式,那么基于接口的类型系统就是在您的数据中不存在紧密的、明确定义的“是”关系的情况下的方法。如果对期望的行为没有这样的关注,那么正确的方法是组合(这在任何情况下都是包装器所暗示的)。
标签: java design-patterns inheritance subclass extends