设计模式之六大原则——里氏替换原则(LSP)
来源:互联网 发布:手机淘宝套餐链接 编辑:程序博客网 时间:2024/05/18 01:52
里氏替换原则(Liskov Substitution Principel)是解决继承带来的问题。
继承的优点:
- 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性;
- 提高代码的重用性;
- 子类可以形似父类,但又异于父类;
- 提高代码的可扩展性;
- 提高产品或项目的开放性。
继承的缺点:
- 继承是侵入性的,只要继承就必须拥有父类的所有属性和方法;
- 降低代码的灵活性,子类必须拥有父类的属性和方法,让子类增加了约束;
- 增强了耦合性,当父类的常量、变量和方法被修改时,必须考虑子类的修改。
定义:
所有引用基类的地方必须能透明地使用其子类的对象。
通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必就能适应。
含义:
- 子类必须完全实现父类的方法
在类中调用其他类时务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了里氏替换原则。
如果子类不能完整地实现父类的方法,或者父类的某些方法在子类中发生了“畸变”,则建议断开父子继承关系,采用依赖、聚集、组合等关系代替继承。
- 子类可以有自己的个性
- 覆盖或实现父类的方法时输入参数可以被放大
如果子类的前置条件较小,子类在没有覆写父类的方法的前提下,子类方法被执行了,这会引起业务逻辑混乱,因为在实际应用中父类一般都是抽象类,子类是实现类,你传递一个这样的实现类就会“歪曲”了父类的意图,引起一堆意想不到的业务逻辑混乱。
- 覆盖或实现父类的方法时输出结果可以被缩小
目的:
采用里氏替换原则的目的就是增强程序的健壮性,版本升级是也可以保持非常好的兼容性。即使增加子类,原有的子类还可以继续运行。在实际项目中,每个子类对应不同的业务含义,使用父类作为参数,传递不同的子类完成不同的业务逻辑。
阅读全文
0 0
- 设计模式之六大原则——里氏替换原则(LSP)
- 设计模式之六大原则——里氏替换原则(LSP)
- 设计模式之六大原则——里氏替换原则(LSP)
- 设计模式之六大原则——里氏替换原则(LSP)
- 设计模式六大原则(三)-- 里氏替换原则 ( LSP )
- 设计模式六大原则——里氏替换原则(LSP)
- 设计模式原则—里氏替换原则(LSP)
- 设计模式六大原则之--里氏替代原则(LSP)
- 设计模式六大原则之--里氏替代原则(LSP)
- IOS设计模式的六大设计原则之里氏替换原则(LSP,Liskov Substitution Principle)
- 设计模式无限重读之里氏替换原则(LSP)
- Java设计模式——六大原则之里氏替换
- 设计模式六大原则——里氏代换原则(LSP,Liskov Substitution Principle)
- 设计模式六大原则之(二)---里氏替换原则
- 设计模式六大原则(2):里氏替换原则LSP(Liskov Substitution Principle)
- 设计模式六大原则例子(三)-- 里氏替换原则(LSP)例子
- 六大设计原则之二_里氏替换原则(LSP)
- 设计模式六大原则——里氏替换原则
- 网络工程师基础
- CSS 汉字两端对齐
- Vue开发环境搭建
- R文本挖掘-文章关键词提取
- 20170724Linux下安装GDB以及调试时候遇到的问题延伸
- 设计模式之六大原则——里氏替换原则(LSP)
- String的分隔符
- I/Choreographer: Skipped 40 frames! The application may be doing too much work on its main thread.
- a标签的几种用法
- KIVY安装
- 设计模式(九)外观模式Facade(结构型)
- 动态规划之数塔问题
- BUG记录01:onInitializeAccessibilityNodeInfo(RecyclerView.java:6290)
- Java事件类及监听器接口