设计模式之里氏替换原则

基本介绍

        子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。

和面向对象多态的区别

        多态,通俗来说,就是多种形态。具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。比如manager继承了user。manager有系统所有权限,user有系统部分权限。

        从定义描述和代码实现上来看,多态和里氏替换原则有点类似,但它们关注的角度是不一样的。多态是面向对象一大特性,是一种语法,是一种代码实现的思路。 里氏替换是一种设计原则,用来指导继承关系中子类如何设计,子类的设计要保证在替换父类的时候,不改变原有程序的逻辑以及不破坏原有程序的正确性。

        继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合度,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障。

        里氏替换原则还有一层按照协议来设计(Design By Contract)的意思。子类在设计时,要遵守父类的行为约定(协议)。父类定义了方法的行为约定,那子类可以改变方法的内部实现逻辑,但不能改变方法原有的行为约定。 这里的行为约定包括:

  • 函数声明要实现的功能
  • 对输入、输出、异常(错误)的约定
  • 甚至包括注释中所罗列的特殊说明

里氏替换原则原则中描述的父类和子类的关系,也可以替换成接口和实现类之间的关系。

违反里氏替换原则的情况

  • 子类违背父类声明要实现的功能
  • 子类违背父类对输入、输出、异常(错误)的约定
  • 子类违背父类注释中所罗列的任何特殊说明

替换的理解

        替换的特性是面向对象语言所支持的多态的特性,同一个行为具有多种不同的表现形式和形态的能力

应用场景

        使用里氏替换要求我们在编码时,使用基类或者接口去定义对象变量。可以使用具体对象进行赋值,实现代码的多样性,实现代码对修改的封闭,扩展的开放。
里氏代换原则与多态的区别 ?

  • 16
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值