对于我当前的项目,我正在为java File
类包装,并为路径String
(即C:\Users\Public\
)包装。
让我们将File
类FileWrapper
的包装器和路径PathWrapper
的包装器称为。FileWrapper
显然必须具有路径:FileWrapper
的File
在磁盘上的位置。现在我的问题是...FileWrapper
应该包含PathWrapper
类型的字段(以及PathWrapper
的PathWrapper.getPath()
的访问器方法),还是应该扩展PathWrapper
,从而继承getPath()
方法?
我遇到的问题是严格地说FileWrapper
不是Path
。这只是一个文件。但是在这种情况下,仅使用继承似乎更简单。
我正在考虑的第二个解决方案还有另一个问题(在getPath()
中创建FileWrapper
方法)。我想创建一个Path
和FileWrapper
都将实现的PathWrapper
接口,以允许同时包含FileWrapper
和PathWrapper
的列表。
如果FileWrapper
是PathWrapper
的子类,则不需要此接口。
最佳答案
OO设计规则:支持组合而不是继承,因为组合(具有关系)为代码提供了更大的灵活性
就像您说的那样,FileWrapper
不是PathWrapper
,您回答了您的问题。
您要将它们绑定在一起,可以将PathWrapper
传递给FileWrapper
的构造函数。
例如,如果您想同时获得一个Collection,则可以创建一个Wrapper接口,其中FileWrapper
和PathWrapper
是此层次结构中的同级兄弟,并共享可以由它们各自实现的不同的通用抽象方法。
许多设计模式都可以应用于此示例,您需要做的就是首先确定您要的内容。