小编典典

Liskov 替换原则的一个例子是什么?

all

我听说 Liskov 替换原则 (LSP) 是面向对象设计的基本原则。它是什么,有哪些使用示例?


阅读 120

收藏
2022-02-28

共1个答案

小编典典

说明 LSP 的一个很好的例子(鲍勃叔叔在我最近听到的一个播客中给出)是有时在自然语言中听起来正确的东西在代码中并不完全有效。

在数学中,aSquare是 a Rectangle。实际上,它是矩形的特化。“is
a”让你想用继承来建模。但是,如果在您制作的代码中Square派生自Rectangle,那么 aSquare应该可以在您期望 a
的任何地方使用Rectangle。这导致了一些奇怪的行为。

想象一下,你的基类上SetWidthSetHeight方法;Rectangle这似乎完全合乎逻辑。但是,如果您的Rectangle参考指向
a
Square,那么SetWidth并且SetHeight没有意义,因为设置一个会更改另一个以匹配它。在这种情况下Square,里氏替换测试失败了,继承自Rectangle的抽象是一个糟糕的抽象。Square``Rectangle

在此处输入图像描述

你们都应该看看其他无价的SOLID
原则励志海报

2022-02-28