当前位置: 首页 > news >正文

【设计原则篇】聊聊里氏替换原则

是什么
子类对象可以替换程序中父类对象出现的任何地方,并且保证原有程序逻辑的正确性不被破坏。

比如我们在实际开发中定义了数据读取的父类,子类可以进行在此功能的拓展、增强但是不能修改原有的内在含义。

里氏替换原则和多态的区别,多态是面向对象编程中一个特性,是用来在具体代码实现的思路,但是里氏替换原则是一种设计原则,是用来指导继承关系中子类该如何设计,保证子类可以替换父类。

如何设计
其实就是按照协议来设计,Design By Contract。子类设计的时候,都要遵循父类函数的行为约定,不修改具体原来的定义。包括功能,接口输入、输出参数,异常约定等。

站在父类的角度思考,去设计子类。

1.子类不能违背父类要实现的功能。
2.子类按照要求实现对输入、输出、异常的约定
3.子类不违背父类所罗列的任何特殊说明

public interface ThirdApiCall {String call(String xxx);}abstract class BaseThirdApiCall implements ThirdApiCall {abstract void before();abstract void after();@Overridepublic String call(String xxx) {before();System.out.println("三方前置调用");after();return null;}
}class BaiduThirdApiCall extends BaseThirdApiCall {@Overridevoid before() {System.out.println("baidu 前置调用");}@Overridevoid after() {System.out.println("baidu 后置调用");}@Overridepublic String call(String xxx) {return super.call(xxx);}
}

子类必须能够替换成它们的基类。即子类应该可以替换任何基类能够出现的地方,并且经过替换以后,代码还能正常工作。另外,不应该在代码中出现 if/else 之类对子类类型进行判断的条件。里氏替换原则 LSP 是使代码符合开闭原则的一个重要保证。正是由于子类型的可替换性才使得父类型的模块在无需修改的情况下就可以扩展。

http://www.lryc.cn/news/229897.html

相关文章:

  • k8s系列-kuboard创建工作负载 docker上传java微服务jar包到仓库的过程
  • 基于单片机的塑料厂房气体检测系统设计
  • HTTP-FLV详解及分析
  • docker应用实例及dockerfile
  • 【Qt之QWizard】使用1
  • 移植LVGL到单片机的一个demo简单介绍
  • rust_for_linux驱动完整版记录
  • Android拖放startDragAndDrop拖拽Glide灵活加载堆叠圆角图,Kotlin(6)
  • 计算机网络课后作业2023秋
  • 阿里云国际站:全球加速GA
  • M2LC-Net
  • Jenkins 质量扫描
  • 【LeetCode刷题笔记】滑动窗口
  • 笔试题之指针和数组的精讲
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • junit写搜索树测试
  • 顺丰接口对接-订单创建与取消(java单元测试)
  • C++:OJ练习(每日练习!)
  • GPTs Hunter 是什么?
  • 【移远QuecPython】EC800M物联网开发板的硬件TIM定时器精准延时
  • HDU 1027:Ignatius and the Princess II ← next_permutation()
  • 主题讲座:全球增材制造现状与未来(暨香港科技大学广州|智能制造学域2024博士学位全额奖学金项目)
  • hugeGraph修改PropertyKey属性类型
  • vscode 访问本地或者远程docker环境
  • 人工智能与充电技术:携手共创智能充电新时代
  • 『自定义B站视频播放速度』
  • Java入门篇 之 继承
  • 如何计算掩膜图中多个封闭图形的面积
  • 【Nginx】CentOS 安装Nignx
  • idea 代码快捷键Mac版