里氏代换原则
里氏代换原则通俗的解释就是任何可以出现基类(父类)的地方必须能够透明地使用子类对象。里氏代换原则是实现开闭原则的基础,在程序设计中应该尽量使用基类来对对象进行定义,在运行时在确定要使用的子类,用子类对象来替换父类对象,里氏代换原则强调面向父类编程。
但是里氏代换原则需要注意的几点有:
1、子类中的所有方法必须在父类中声明,或者说子类必须是吸纳父类的全部方法
为什么这么说呢?比如有下面这样两个类:
我们可以看到子类SubClass继承了基类BaseClass并实现了Operation1()方法,同时又增加了Operation2()方法,如果我们用SubClass obj=new SubClass();那么我们的这个obj对象是访问不到Operation2()方法的,也就是当我们针对父类编程则无法使用子类中新增的方法Operation2(),要想使用Operation2()方法不能用父类声,必须使用子类进行声明,说明这样的设计思路是违反里氏代换原则的。
2、在运用里氏代换原则的时候要尽量把类设计成接口或者抽象类,让子类去继承父类或者实现接口,实现父类中声明的方法,在运行时使用子类替换父类实例,我们可以很方便的来扩展系统。
---------------------------------------------------低调的分割线----------------------------------------
我们使用一个例子来说明这个具体的问题,动物管理员要喂猴子水果,当然每天的喂的水果可能是苹果也可能是香蕉。那么我们这个设计会这样设计:
代码:
public class ZooKeeper { public static void main(void String []args) { // TODO implement here Apple apple=new Apple(); Monkey monkey=new Monkey(); monkey.setApple(apple); monkey.eat(); } }
与之对应的的Monkey中的方法可能存在下面的代码:
public void eat() { apple.eat(); }
如果动物管理员要给猴子喂香蕉吃,那么我们就必须修改猴子eat()中的源代码源代码。那么现在我们可以使用里氏代换原则对这个设计进行重构。
客户类ZooKeeper可以通过读取配置文件config.xml文件通过反射生成对象注入到Monkey中。根据里氏代换原则这里setFruit可以接受Apple的子类Banana的对象,从而大大提高程序的灵活性。
面向对象更好的实现了复用,而要实现高复用性就要遵从开闭原则(对修改组件的代码关闭,对扩展组件开放),而里氏代换原则是实现开闭原则的基础。
相关推荐
里氏代换原则案例程序LSP.zip
这一个学习java的笔记,里面主要介绍java的里氏代换原则
android设计模式里氏代换原则_法海捉拿白蛇新解.pdf
里氏代换原则是由麻省理工学院(MIT)计算机科学实验室的Liskov女士,在1987年的OOPSLA大会上发表的一篇文章《Data Abstraction and Hierarchy》里面提出来的,主要阐述了有关继承的一些原则,也就是什么时候应该...
http://blog.csdn.net/xingjiarong/article/details/50081857
c++里氏替换原则说明1
NULL 博文链接:https://364232252.iteye.com/blog/2371188
主要为大家详细介绍了里氏代换原则的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。—— From Baidu 百科 3、依赖倒转原则(Dependence Inversion Principle) 这个是开闭原则的基础,具体内容:真...
而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。—— From Baidu 百科 3、依赖倒转原则(Dependence Inversion Principle) 这个是开闭原则的基础,具体内容:真...
第7章 里氏代换原则 第8章 依赖倒转原则 第9章 接口隔离原则 第10章 合成、聚合复用原则 第11章 迪米特法则 第12章 简单工厂模式 第13章 工厂方法模式 第14章 抽象工厂模式 第15章 单例模式 第16章 .......
2、里氏代换原则 3、依赖转换原则 4、接口隔离原则 5、合成/聚合复用原则 6、最少知识原则 (二)设计模式 1)工厂模式(Factory) 2)抽象工厂模式(Abstract Factory) 3)建造者模式(Builder) 4)原型模式...
里氏代换原则(LSP):一个软件实体如果使用的是一个基类的话,那么一定适用于其子类。 依赖倒转原则(DIP):要依赖于抽象,不要依赖于具体。 接口隔离原则(ISP):使用多个专门的接口比使用单一的总接口要好。 合成/...
2、里氏代换原则 3、依赖倒转原则 4、接口隔离原则 5、迪米特法则 6、合成复用原则 使用了一个个的demo案例,以通俗易懂的生活案例解析软件开发设计原则,掌握开发细节。写出耦合度低、易于扩展、更容易维护的...
3.1开闭原则此原则是由Bertrand Meyer提出的 3.2里氏代换原则里氏代换原则是由Barbara Liskov提出的 3.3依赖倒转原则指在软件里面
7:里氏代换原则;8:依懒倒转原则;9:接口隔离原则;10:合成/聚合复用原则;11:迪米特法原则;12:简单工厂模式;13:工厂方法模式;14:抽象工厂模式;15:单例模式;16:单例模式与MX记录;17:多例模式;18:序列健生成器与单例及...
详细介绍了: 单一职责原则 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则
软件体系结构七大设计原则,开闭原则 里氏代换原则 依赖倒转原则 迪米特法则 迪米特法则
面向对象设计原则概述 单一职责原则 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则
面向对象设计原则概述 单一职责 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则