目前的设计是
SharedFolder
是Folder
。SharedFile
是File
的子类,具有远程资源URL。Folder
在File
方法中接受add
。SharedFolder
仅接受SharedFile
但不接受非共享File
File
可以通过Folder
移至另一个add
。SharedFolder
和Folder
中文件的用户界面大致相同。 add
中的SharedFile
违反了LSP。如何在允许一些UI代码重用的同时重新组织对象结构?
答案 0 :(得分:3)
您的问题有很多可能的答案。这是两个:
add
基类中删除Folder
方法,只让它公开(只读)File
元素集合。SharedFolder
和Folder
之间的'是'关系。换句话说,不要让SharedFolder
继承Folder
。相反,您可以让SharedFolder
成为某种包含Folder
(合成而不是继承)的元数据类。答案 1 :(得分:3)
您可以将Folder
列为Folder<T extends File>
,add(T)
,并SharedFolder extends Folder<SharedFile>
。
这样,SharedFolder
只能替换另一个Folder<SharedFile>
,而不能替换任何其他类型的Folder<File>
(如果你的语言允许的话。这可以用Java编写)