《java与模式》笔记(三) 里氏替换原则

《编程导论(Java)·2.1.1里氏替换原则》什么是LSP 你可以不知道继承、多态,但是必须知道里氏替换原则(Liskov SubstitutionPrinciple、LSP)。 阅读详情

 ξ 7.2 什么是里氏替代原则

☆ 里氏替换原则由Barbara Liskov提出,它的严格表达是,如果对每一个类型为T1的对象o1,都由类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。换句话说,一个软件实体如果使用的是一个积累大话,那么一定适用于其子类,而且它根本不能察觉出基类对象和子类对象的区别。

☆ 里氏替换原则的反命题是不成立的。

ξ 7.3 里氏替换原则在设计模式中的体现
☆ 策略模式、合成模式和代理模式是对该原则的最好诠释。

ξ 7.4 从代码重构的角度理解
☆ 对违反里氏替换原则的设计的重构
① 创建一个新的抽象类,作为两个具体类的基类,将两个具体类的共同行为移动到抽象类中;
② 将两个具体类的继承关系改写为委派关系。

关键知识点:
☆ 里氏替换原则的概念,基类可以出现的地方,派生类同样可以出现;
☆ 里氏替换原则的反命题不成立;
☆ 对于A、B两个类,B由A派生,如果这种继承违反里氏替换原则,可以采用如下方法进行重构:将A、B的共同行为抽象出来,建立一个抽象类C,A和B都是C的派生类,如下图所示:

设计模式六大原则(三)--里氏替换原则 在实际应用中,里氏替换原则的应用场景非常广泛,例如在设计多态性时,就需要遵循里氏替换原则。此外,里氏替换原则还可以应用于接口的设计、异常处理等方面。总之,里氏替换原则是面向对象设计中非常重要的一条原则,它可以帮助开发者更好地设计类和对象之间的关系,提高程序的健壮性、可扩展性和可重用性。 阅读详情

相关推荐

java设计模式3,里氏替换原则

里氏替换原则的内容可以描述为: “派生类(子类)对象可以在程序中代替其基类(超类)对象。”

学Java,找哪吒 3617

Java 中的 23 种设计模式详解

项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

微笑听雨 7万+

【愚公系列】面向对象设计原则(三)-里氏替换原则(Liskov Substitution Principle or LSP)

面向对象设计原则是一些通用的软件设计原则,用于指导软件设计人员开发高质量、可扩展、可维护的软件系统。这些原则的作用如下:提高软件系统的可维护性:遵循面向对象设计原则可以将代码分解为更小、更专注的模块,从而降低代码的复杂性和耦合度,提高系统的可读性和可维护性。提高软件系统的可扩展性:开放封闭原则可以帮助软件系统更容易地适应变化,降低对现有代码的影响,从而提高软件系统的可扩展性和灵活性。

愚公智库 47万+

Java设计模式(疯狂Java联盟版)

1. 设计模式........................................................................................................................ 3 1.1 创建型模式

chuck_sun的专栏 3036

里氏替换原则实战演示项目

抽象基类的作用是提供稳定的抽象接口和共通行为骨架,而非承载具体实现细节。良好的抽象应聚焦于领域本质行为,而非实现路径。以动物进食为例:对比发现,单一容易引发语义模糊——草食动物能否吃肉?肉食动物能否吃草?这些问题源于抽象粒度过粗。改进方案采用接口分离:@Override@Override@Override设计要素单一继承模型接口组合模型抽象清晰度低(行为混杂)高(职责分明)扩展能力受限(仅单继承)

weixin_36289742的博客 879

mysql9.0windows安装

将这里的位置修改为你刚刚创建并复制data目录的地址即可,win11的系统使用vscode修改之后,会让你确认开启更高权限以进行保存,比较方便,window10不需要确认,修改后可以直接保存。:在修改之前,最好将下图文件进行备份,将原始的文件保存好一份,以防更改了配置之后,导致mysql服务报错,无法启动,备份好的话直接将有问题的配置文件给替换就可以,无需重新安装一次mySql。双击下载的msi文件进行安装。安装有问题的,可以直接进行卸载,新本的mySql会将注册表中的数据自动进行清除,还是很方便的。

m0_74824123的博客 6448

java的23种设计模式

核心思想:创建一系列相关 / 相互依赖的对象,而无需指定它们的具体类,提供一个工厂接口用于创建多个产品族的对象。适用场景:存在多个产品族,且产品族内的对象需配套使用(如电脑品牌:联想(主板 + CPU)、戴尔(主板 + CPU),每个品牌是一个产品族)。框架应用:Spring 的(顶层抽象工厂,负责创建各类 Bean 实例)、MyBatis 的数据源工厂。Java 设计模式以 GoF 23 种为核心,分创建型、结构型、行为型三大类,核心目标是解耦、复用、扩展、维护。

魏波 2577

Unity插件-Mirror使用方法(一)Mirror介绍

Unity Mirror 是一个专为 Unity 引擎设计的开源、社区驱动的网络库,主要用于简化多人联机游戏的开发。它最初是为了替代 Unity 原生的 UNet 系统(已被官方弃用)而创建的,因其轻量、灵活和高效的特点,成为 Unity 开发者构建多人游戏的热门选择。

qq_44501691的博客 4099

java设计模式

(1) 单例模式 (实现方式 私有构造器 + 私有静态本身的实例 + 共有实例方法返回本身的实例), 需要判断是否已经生成过实例)一个类只允许其有一个实例化对象 在并发程序中用的可能比较多, 涉及线程安全, 我自己知道的是Spring 依赖注入, 在容器中的Bean一般都是单例的..public class Singelton { // 最平凡的实现方式 private volatile ...

isanovice的博客 1万+

鸿蒙5应用真机调试超详细教程

本文详细介绍了鸿蒙5应用的真机调试全流程,包括开发环境搭建(安装DevEcoStudio、配置SDK)、真机调试准备(开启USB调试、配置自动/手动签名)、调试实战(生成HAP包、断点调试技巧)以及多设备协同调试方法。文中提供了设备连接、签名配置等常见问题的解决方案,并包含示例代码展示分布式设备联动功能。通过本教程,开发者可快速掌握鸿蒙5应用的调试技能,建议结合官方文档深入学习高级调试技巧。

2301_79392153的博客 2197

保姆级教程:在Ubuntu 22.04上用Python3.10和pysoem搞定EtherCAT电机回零与位置控制

本文提供在Ubuntu 22.04上使用Python3.10和pysoem实现EtherCAT电机回零与位置控制的详细指南。涵盖环境搭建、权限配置、EtherCAT主站架构解析、CiA402协议核心机制及工业级精度控制实现,帮助开发者快速掌握Python在工业自动化中的应用。

weixin_30952535的博客 329

一次性讲清Java23种设计模式

基本掌握23种设计模式的基本概念并能够写出相应的例子。

wdj_yyds的博客 3458

使用SSE流式输出(Javaweb前后端实战)

SSE(Server-Sent Events)是一种在Web应用中实现单向实时通信的技术。通过SSE,服务器可以主动向客户端发送更新,而无需客户端不断发起请求。这对于需要实时更新的应用场景(如聊天应用、实时数据监控等)非常有用。(服务端单向传输客户端,长连接)

记得开心一点嘛的博客 1万+

整洁架构SOLID-里氏替换原则(LSP)

LSP可以且应该被应用于软件架构层面,因为一旦违背了可替换性,该系统架构就不得不为此增添大量复杂的应对机制。

贾欣晓的博客 1111

【Unity实战篇】 接入百度翻译,实现文本自动翻译功能

日常在做项目的过程中,游戏本地化几乎已经成为必不可少的一步。 本篇文章将演示怎样在Unity中接入百度翻译,实现文本自动翻译的功能。

努力前行,总会成为自己心中的那道光 9059

15、SQL Server查询优化与CPU负载管理

本文深入探讨了SQL Server查询优化与CPU负载管理的关键技术,包括强制连接类型的使用、键查找问题的解决、索引设计的最佳实践、高CPU负载的排查与优化,以及并行性的利弊与调整策略。通过优化查询逻辑、合理设计索引、监控与管理CPU资源,可以显著提升SQL Server的性能和稳定性。适用于数据库开发人员和DBA进行性能调优参考。

pz8901234的博客 79

关于里氏替换原则与多态概念纠正

public abstract class Quadrangle{ protected abstract void getWidth(); protected abstract void getHeight(); } public class Rectangle extends Quadrangle { private long width; private long height

YCixZoem的博客 5335

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

OO设计原则 -- Liskov Substitution Principle: OO设计的LSP里氏替换原则

概要  Functions that use pointers or references to base classesmust be able to use objects of derived classes without knowing it. 所有引用基类的地方必

亿言 7108

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

闲谈设计模式之里氏替换原则

闲谈设计模式之里氏替换原则里氏替换原则(Liskov Substitution Principle)代码示例分析Android设计模式代码示例 里氏替换原则(Liskov Substitution Principle) 里氏替换原则:里氏替换原则俗称LSP,其含义每一个类型S的对象假设为O1,都有一个T类型的对象为O2,当业务场景需要的是O1被当作O2使用,但不会导致程序出现问题,换言之就是基类使...

易庞宙的博客 530

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

设计原则之里氏替换原则(LSP)

简介 里氏替换原则是在做继承设计时需要遵循的原则,不遵循了 LSP 的继承类会带来意想不到的问题。 定义 里氏替换原则(Liskov Substitution Principle) 是由 Barbara Liskov 在 1987 年提出来的,Liskov 是她的姓,国内翻译成 里氏。 原则...

chj287522860的博客 303

里氏替换原则(LSP)

里氏替换原则(LSP) 一句话来说就是: 如果对于类型T的对象x,q(x)成立,那么对于类型T的子类型S的对象y,q(y)也成立。 具体到Java中就有以下几点: 子类型可以增加方法,但不可以删除方法 子类型需要实现抽象类型(接口,抽象类)中所有未实现的方法 子类型中重写的方法必须有相同或者子类型的返回值,或者符合协变(covariant)的返回值 子类型中重写的方法必须使用同类型的参数或者符合逆变(contravariant)的参数(由于Java语言的特点,这一点被处理为重载overload,而不是重写

weixin_43655843的博客 530

Liskov Substitution Principle (LSP) - OO设计的里氏替换原则

Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.Robert C. Martin氏为我们总结了在面向对象的设计(OOD)中应该遵循的原则,这些原则被称为“Principles of OOD”,关于

xiaolu123456789的专栏 975

OO设计原则 OO设计的LSP里氏替换原则

概要  Functions that use pointers or references to base classesmust be able to use objects of derived classes without knowing it. 所有引用基类的地方必须能透明地使用其子类的对象。    即: ◇ 所以使用基类代码的地方,用派生类代码替换后,能够正确的执行动作处理。

yj_021219的专栏 412

里氏替换原则Liskov Substitution Principle,LSP

里氏替换原则

weixin_44628096的博客 439

里氏替换原则——举例说明Java设计模式中的里氏替换原则

里氏替换原则——举例说明Java设计模式中的里氏替换原则1. 前言官方定义:2. 举例说明2.1 例子介绍2.2 反例2.2.1 类图说明2.2.2 代码说明2.2.3 测试2.2.4 分析优缺点2.3 正例2.3.1 类图说明2.3.2 代码说明(1)抽取基类(父类)-->ChooseSweater(2)倾向中性服饰子类-->NeutralChooseSweater(3)倾向女性服饰子类-->GirlChooseSweater2.3.3 测试2.3.4 分析优缺点3. 总结使用继承?如何

@素素~的博客 1873
上一篇: 《java与模式》笔记(二) 开闭原则
下一篇: 《java与模式》笔记(四) 依赖倒转原则
plusir
博客等级 码龄24年 11粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值