目前的设计是冲突里氏替换原则的
SharedFolder
是Folder
一个子类。SharedFile
是带有远程资源URL的File
的子类。Folder
在add
方法中接受File
。SharedFolder
只接受SharedFile
而不是非共享File
File
可以被移动到另一个Folder
与add
。- 用于浏览
SharedFolder
和Folder
中的文件的UI基本相同。
add
in SharedFile
违反了LSP。如何重新组织对象结构,同时允许重用一些UI代码?
您可以定义add方法以不合约的方式保证在所有情况下都可以添加。这样就没有替代失败。 – usr
@usr,你是说文档本身可以满足LSP吗?在这种情况下,即使臭名昭着的[Iterator.remove()](https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html#remove--)方法也能满足LSP。 – jaco0646
静态类型只是一种以机器可读的方式添加* some *文档的方法。接口契约是任意的。这是你定义的任何东西。不要挂上语法或语言问题。 – usr