在SharedFolder中违反Liskov替换原则

时间:2016-08-03 07:35:40

标签: oop inheritance solid-principles liskov-substitution-principle

目前的设计是

  1. SharedFolderFolder
  2. 的子类
  3. SharedFileFile的子类,具有远程资源URL。
  4. FolderFile方法中接受add
  5. SharedFolder仅接受SharedFile但不接受非共享File
  6. File可以通过Folder移至另一个add
  7. 用于浏览SharedFolderFolder中文件的用户界面大致相同。
  8. add中的SharedFile违反了LSP。如何在允许一些UI代码重用的同时重新组织对象结构?

2 个答案:

答案 0 :(得分:3)

您的问题有很多可能的答案。这是两个:

  • add基类中删除Folder方法,只让它公开(只读)File元素集合。
  • 删除SharedFolderFolder之间的'是'关系。换句话说,不要让SharedFolder继承Folder。相反,您可以让SharedFolder成为某种包含Folder(合成而不是继承)的元数据类。

答案 1 :(得分:3)

您可以将Folder列为Folder<T extends File>add(T),并SharedFolder extends Folder<SharedFile>

这样,SharedFolder只能替换另一个Folder<SharedFile>,而不能替换任何其他类型的Folder<File>

(如果你的语言允许的话。这可以用Java编写)