首页 > 解决方案 > 如何防止违反里氏换人

问题描述

我在任何地方都能读到关于 Liskov Substitution 的信息,只有 1 个示例可用,即 Rectangle 和 Square,并且解释了我们如何违反它,但没有描述纠正措施。链接中提供了一个这样的示例:

如果我们违反它,我想知道纠正步骤。

提前致谢。

标签: solid-principlesliskov-substitution-principle

解决方案


在和的情况下,Rectangle纠正Square措施很简单,不要在它们之间实现继承。LSP 告诉我们,两者都不是另一个的父母或孩子,因此请将它们分开。他们仍然可以是兄弟姐妹,例如两者都可以继承自Shape; 但它们是Shape层次结构的独立分支。

两个类之间 LSP 违规的另一个潜在解决方案是重新定义其中一个或两个。这不是一个可行的解决方案RectangleSquare因为它们是在数学上定义的;但是在您可以控制抽象或其实现的情况下,您可以编辑合约以适应代码,反之亦然。


推荐阅读