设计模式——里氏替换原则

What:liskov替换原则

子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。

If for each object 01 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then s is subtype of T

如果对每一个类型为S的对象o1,都有类型为T的对象o2。使得以T定义的所有程序P在所有的对象O1都能替换成O2时,程序P的行为没有发生变化,那么类型S是类型T的子类。

所有引用基类的地方必须能够透明地使用其子类对象。

how

1.子类必须要完全实现父类的方法:使用抽象接口来定义传入或者传出的对象类型。

2.子类可以有自己的个性:比如接口的现实就是如此,扩展了接口或者抽象类型

3.覆盖或者实现父类的方法时输入参数可以放大:面向接口编程

4.覆盖或实现父类的方法时输出结果可以被缩小:父类的一个方法的返回值是一个类型T子类的相同方法(重载或覆写)的返回值为S,那么里氏替换原则就要求S必须小于等于T,也就是说,要么S和T是同一个类型,要么S是T的子类,为什么呢?分两种情况:

如果是覆写,父类和子类的同名方法的输入阐述是相同的,两个方法的范围值S小于等于T,这是覆写的要求,这才是重中之重,子类覆写父类的方法,天经地义

如果是重载,则要求方法的输入参数类型或数量不相同,在里氏替换原则要求下,就是子类的输入参数宽于或等于父类的输入参数,也就是说你写的这个方法是不会被调用的。

在开发中比较常见的如:http请求的callback回掉事件,都是写抽象的接口作为传入参数,实际中是使用各种实现的接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值