设计模式之七大原则

您所在的位置:网站首页 gt40t302代换 设计模式之七大原则

设计模式之七大原则

2024-07-05 22:22| 来源: 网络整理| 查看: 265

里氏替换原则(Liskov Substitution Principel)是解决继承带来的问题。

4 里氏代换原则(Liskov Substitution Principle, LSP)

4.1 什么是里氏代换原则

    里氏代换原则是由麻省理工学院(MIT)计算机科学实验室的Liskov女士,在1987年的OOPSLA大会上发表的一篇文章《Data Abstraction and Hierarchy》里面提出来的,主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中的蕴涵的原理。2002年,我们前面单一职责原则中提到的软件工程大师Robert C. Martin,出版了一本《Agile Software Development Principles Patterns and Practices》,在文中他把里氏代换原则最终简化为一句话:“Subtypes must be substitutable for their base types”。也就是,子类必须能够替换成它们的基类。     我们把里氏代换原则解释得更完整一些:在一个软件系统中,子类应该可以替换任何基类能够出现的地方,并且经过替换以后,代码还能正常工作。

4.2 第一个例子:正方形不是长方形     “正方形不是长方形”是一个理解里氏代换原则的最经典的例子。在数学领域里,正方形毫无疑问是长方形,它是一个长宽相等的长方形。所以,我们开发的一个与几何图形相关的软件系统中,让正方形继承自长方形是顺利成章的事情。现在,我们截取该系统的一个代码片段进行分析:长方形类Rectangle:

class Rectangle { double length; double width; public double getLength() { return length; } public void setLength(double height) { this.length = length; } public double getWidth() { return width; } public void setWidth(double width) { this.width = width; } }

正方形类Square:

class Square extends Rectangle {   public void setWidth(double width) {     super.setLength(width);     super.setWidth(width);    }   public void setLength(double length) {     super.setLength(length);     super.setWidth(length);     } }

    由于正方形的度和宽度必须相等,所以在方法setLength和setWidth中,对长度和宽度赋值相同。类TestRectangle是我们的软件系统中的一个组件,它有一个resize方法要用到基类Rectangle,resize方法的功能是模拟长方形宽度逐步增长的效果:  测试类TestRectangle:

class TestRectangle {   public void resize(Rectangle objRect) {     while(objRect.getWidth()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3