Liskov Substitution Principle

LSP(Liskov Subsitution Principle)提供了一个原则去评价继承的合理性.
一般情况下, 当我们发现A “IS-A” B 的时候, 我们会让B继承A.
但是LSP告诉我们, 只有当A “IS-SUBSTITUTABLE-FOR” B的时候, 才应该让B继承A, 否则会带来一些问题.

例子

假设有一个类Rectangle, 他有长和宽两个属性, 那么Square 是否应该是Rectangle 的一个子类呢?
关键就是看他们是否满足"IS-SUBSTITUTABLE-FOR" 的关系.
Rectangle 默认他的长和宽是独立变化的, 在这种前提下, 是不可能将Rectangle 替换为Square的, 所以他们不应该是继承关系.

坏味道

对接口的不完全实现

当实现一个接口的时候, 你发现有些方法用不上, 于是就返回一个NotImplementedException. 这时你其实就违反了LSP.

循环中判断类型

假设你对一个类的实例列表进行循环, 当你不得不在里面加上一个判断条件在类型为某一个子类的时候要特殊处理, 这时候也违反了LSP.

违反LSP的坏处

  1. 随着程序的增长, 代码中会出现大量的逻辑判断.
  2. 无法暴露接口给其他开发者, 无法合作, 无法发布.

Reference

https://deviq.com/liskov-substitution-principle/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值