`
dr2tr
  • 浏览: 138475 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Liskov Substitution Principle

阅读更多

Liskov Substitution Principle, 由Barbara Liskov 和 Jeannette Wing在93年提出,其原文为:“Let q(x) be a property provable about objects x of type T. Then q(y) should be true for objects y of type S where S is a subtype of T. ” 。通俗一点来说,LSP的意思是指,“An instance of a class should function as an instance of its superclass” (《Design Pattern Java Workbook》)。

字面上的意思不好理解,举一段程序:

import java.util.*;
public class a{
    
public static void main(String args[]){
        String names[] 
= {"name1""name2"};
        
        List L 
= Arrays.asList(names);
        L.add(
"name3");
        
}
}

这段程序运行结果是什么?答案是:

java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(Unknown Source)
    at java.util.AbstractList.add(Unknown Source)
    at a.main(a.java:
7)
Exception in thread 
"main" 

抛出异常的原因是由 asList() 返回的List不支持add方法。而我们只要把代码改为:

List L = new ArrayList(Arrays.asList(names));

运行就正常了。

我们知道,List, ArrayList, Array 都有一个公共的父类(接口)Collection, asList 最初就是在Collection声明的,所以我们说,这里违反了LSP原则。(当然,从字面上讲,这么说还需要我们把Java接口看成pure的虚类来看)

其实这只是很小的一点,记下备忘

分享到:
评论

相关推荐

    面向对象的11个原则

    里氏替换原则(The Liskov Substitution Principle) 依赖倒置原则(The Dependency Inversion Principle?) 接口分离原则(The Interface Segregation Principle) 包的的设计原则 发布/重用等价原则(REP) 公共闭合...

    24种设计模式C#版

    2、里氏替换原则【LISKOV SUBSTITUTION PRINCIPLE】:继承与派生的规则.(子类可替换父类) 3、依赖倒转原则【DEPENDENCE INVERSION PRINCIPLE】:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该...

    Java_面向对象设计原则总结

    2 里氏替换原则-Liskov Substitution Principle (LSP) 3 接口分隔原则-Interface Segregation Principle (ISP) 4 单一职责原则-Single Responsibility Principle (SRP) 5 开闭原则-The Open-Closed ...

    设计模式总结

    里氏替换原则(Liskov Substitution Principle,LSP) 只要父类出现的地方都可以用子类替换。 依赖倒置原则(Dependece Inversion Principle,DIP) 面向接口编程。细节应该依赖抽象。 依赖可以传递。 依赖有三...

    Java23种基本的设计模式整料整理学习源码示例zip

    里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的...

    99 Bottles of OOP A Practical Guide to Object-Oriented Design 1st Edition

    Avoiding conditionals by obeying the Liskov Substitution Principle Making targeted improvements by reducing Code Smells Improving changeability with polymorphism Manufacturing role-playing objects ...

    JAVA六大原则代码.zip

    里氏替换原则(Liskov Substitution Principle,LSP):子类应该能够替换掉父类并且工作正常,即子类必须能够完全替代父类的功能而不产生错误。这个原则保证了代码的可靠性和稳定性。 接口隔离原则(Interface ...

    24种设计模式介绍与6大设计原则

    里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能...

    设计模式Demo

    里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能...

    oo design principles

    oo设计的原则。 Single Responsibility Principle (SRP) ...Liskov Substitution Principle (LSP) a.k.a. Design by Contract Dependency Inversion Principle (DIP) Interface Segregation Principle (ISP)

    《Java设计模式(第2版)》

    2、里氏代换原则(Liskov Substitution Principle) 只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。 3、依赖倒转原则(Dependence ...

    Java 设计模式

    2、里氏代换原则(Liskov Substitution Principle)  只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。 3、依赖倒转原则(Dependence ...

    OOD面试应对方法 SOLID原则.mp4

    应届生及亚马逊面试必考,IT求职必备基础。...L - Liskov substitution principle 里氏替换原则 I - Interface segregation principle 接口分离原则 D - Dependency Inversion Principle 依赖反转原则

    设计模式,软件开发者必读

    1.5.2 里氏代换原则(LISKOV SUBSTITUTION PRINCIPLE,常缩写为.LSP) 8 1.5.3 依赖倒置原则(DEPENDENCE INVERSION PRINCIPLE) 8 1.5.4 接口隔离原则(INTERFACE SEGREGATION PRINCIPLE, ISP) 9 1.5.5 合成/聚合复用原则...

    Java 23种设计模式详解

    2、里氏代换原则(Liskov Substitution Principle) 3、依赖倒转原则(Dependence Inversion Principle) 4、接口隔离原则(Interface Segregation Principle) 5、迪米特法则(最少知道原则)(Demeter Principle)...

    深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP

    前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第3篇,里氏替换原则LSP(The Liskov Substitution Principle )。 英文原文:...

    面向对象六大设计原则

    2、里氏替换原则(Liskov Substitution Principle,LSP) 3、依赖倒置原则(Dependence Inversion Principle,DIP) 4、接口隔离原则(Interface Separate Principle,ISP) 5、合成/聚合复用原则(Composite/...

    JavaCodeDesign:这是Java设计模式的样本项目

    里氏替换原则 lsp(Liskov Substitution Principle) 3. 依赖倒置原则 dip(Dependence Inversion Principle) 4. 接口隔离原则 isp(interface-segregation principles) 5. 迪米特法则 lod(Least Knowledge ...

    深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP

    用来更好地进行面向对象编程,五大原则分别是: The Single Responsibility Principle(单一职责SRP) The Open/Closed Principle(开闭原则OCP) The Liskov Substitution Principle(里氏替换原则LSP) ...

    SOLID Principles Succinctly

    SOLID Principles Succinctly Published on : October 31, 2016 Description There is always room for improving ...Liskov Substitution Principle Interface Segregation Principle Dependency Inversion Principle

Global site tag (gtag.js) - Google Analytics