solid-principles - 如何防止违反里氏换人
问题描述
我在任何地方都能读到关于 Liskov Substitution 的信息,只有 1 个示例可用,即 Rectangle 和 Square,并且解释了我们如何违反它,但没有描述纠正措施。此链接中提供了一个这样的示例:
如果我们违反它,我想知道纠正步骤。
提前致谢。
解决方案
在和的情况下,Rectangle
纠正Square
措施很简单,不要在它们之间实现继承。LSP 告诉我们,两者都不是另一个的父母或孩子,因此请将它们分开。他们仍然可以是兄弟姐妹,例如两者都可以继承自Shape
; 但它们是Shape
层次结构的独立分支。
两个类之间 LSP 违规的另一个潜在解决方案是重新定义其中一个或两个。这不是一个可行的解决方案Rectangle
,Square
因为它们是在数学上定义的;但是在您可以控制抽象或其实现的情况下,您可以编辑合约以适应代码,反之亦然。
推荐阅读
- javascript - 如何接收和处理 Chrome 通知/推送通知?
- hibernate - Hibernate 5迁移:使用错误别名创建的映射实体的查询集合生成异常
- python - tensorflow LSTM model.predict
- python - 类和实例
- django - 什么是 Django 中的 self.instance?
- encryption - 基于模 m 的 RSA 字长
- node.js - 如何模拟 await dynamoDb.putItem(...).promise()?
- javascript - 响应客户端后如何在graphql解析器中继续处理?
- amazon-web-services - 高度并发的 AWS Express Step Functions
- elasticsearch - 没有 Doctrine 的 FOSElasticaBundle 和 Symfony 5。可能吗?