美文网首页
面向对象原则之里氏替换原则

面向对象原则之里氏替换原则

作者: 飞奔的小马 | 来源:发表于2017-07-05 11:02 被阅读13次
一.简称

英文全称是Liskov Substitution Principle, 缩写是LSP

二.定义

如果对每一个类型为S的对象O1,都有类型为T的对象O2,使得以T定义的所有程序P在所有的对象O1都替换成O2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。
简单的说就是所有引用基类的地方必须能透明地使用其子类的对象。通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者根本就不需要知道是父类还是子类,但是反过来就不行,有子类出现的地方,父类未必就能适应。总的来说就是抽象。

比如从Window和View的关系来看

window.png
//窗口类
public class Window{
  public void show(View child){
    child.draw();
  }
}
//测量视图的宽高为公用代码,绘制实现交给具体的子类
public abstract class View{
  public abstract void draw();
  public void measure(int width,int height){
          //测量视图大小
  }
}
//TextView 的具体实现
public class TextView extends View{
   public void draw(){


   }
}
//Button的具体实现
public class Button extends View{
   public void draw(){

  }
}

Window依赖于View,而View定义了一个视图抽象,measure是各个子类共享的方法,子类覆写View的draw方法实现自己特有的功能,任何继承自View类的子类都可以设置给View方法,就是所说的里氏替换。通过里氏替换,就可以定义各式各样的View,然后传递给Window,Window负责将View显示到屏幕上。

三.核心原理

核心是抽象,而抽象又依赖于继承特性。
继承的优缺点:
优点:
(1)代码复用,减少创建类的成本,每个子类都拥有父类的方法和属性
(2)子类和父类基本相似,但又与父类有所区别
(3)提高代码的可扩展性
缺点:
(1)只要继承就必须拥有父类的所有属性和方法
(2)可能造成子类代码冗余、灵活度降低,因为子类必须拥有父类的属性和方法。
在实际使用中要根据具体的情况来看要不要使用继承。

四.注意事项

(1)子类的所有方法必须在父类中声明,或子类必须实现父类中声明的所有方法。因为根据里氏替换原则,为了保证系统的扩展性,在程序中通常使用父类来进行定义,如果一个方法只存在子类中,在父类中不提供相应的声明,则无法在以父类定义的对象中使用该方法。
(2)尽量把父类设计为抽象类或接口,让子类继承父类或实现父接口,并实现父类中声明的方法,运行时,子类实例替换父类实例,我们可以很方便地扩展系统的功能,同时无须修改原有子类的代码,增加新的功能可以通过增加一个新的子类来实现。里氏替换原则是开闭原则的具体实现手段之一。

总结

里氏替换原则和开闭原则一般都是一起使用的,通过里氏替换来达到对扩展开放,对修改关闭的效果。

相关文章

  • 六大设计原则详解(2)-里氏替换原则

    简介: 里氏替换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之...

  • 01-设计模式原则

    面向对象的设计原则 面向对象的设计原则也被称为SOLID。SOLID原则包括单一职责原则、开闭原则、里氏替换原则、...

  • Swift设计模式----目录

    面向对象设计原则: 开闭原则 单一职责原则 依赖倒置原则 接口分离原则 迪米特法则 里氏替换原则 面向对象设计模式...

  • python和设计模式19

    里氏替换原则(Liskov Substitution principle) 李氏替换原则是关于面向对象继承关系的原...

  • 面试题

    1>面向对象设计原则 单一职责原则,开闭原则,依赖倒置原则(面向接口编程),迪米特原则,里氏替换原则,接口隔离原则...

  • 面向对象原则之里氏替换原则

    一.简称 英文全称是Liskov Substitution Principle, 缩写是LSP 二.定义 如果对每...

  • Java基础学习第二十五天——设计模式

    [TOC] 面向对象思想设计原则 单一职责原则 开闭原则 里氏替换原则 依赖注入原则 接口分离原则 迪米特原则 单...

  • OOP之「SOLID」

    SOLID 面向对象设计原则 英文简写名称SRP单一职责原则OCP开放封闭原则LSP里氏替换原则ISP接口隔离原则...

  • 设计模式之里氏替换原则

    设计模式之里氏替换原则 里氏替换原则(LSP: Liskov Substitution Principle) 定义...

  • 设计模式之单例模式

    引言-面向对象设计原则 单一职责原则 开闭原则 里氏替换原则 接口隔离原则 依赖倒置原则 迪米特原则 什么是单例模...

网友评论

      本文标题:面向对象原则之里氏替换原则

      本文链接:https://www.haomeiwen.com/subject/qmofhxtx.html