`
xiaotian_ls
  • 浏览: 300878 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

里氏替换原则(LSP)和合成/聚合复用原则(CARP)

阅读更多
里氏替换原则(LSP)
LSP是继承复用的基石。只有当衍生类可以替换掉基类,软件单位的功能不会受到影响时,基类才能真正被复用,而衍生类也才能在基类的基础上增加新的行为。
里氏替换原则讲的是基类和子类的关系。只有当这种关系存在时,里氏代换关系才存在,反之则不存在。如果两个基本类A和B之间的关系违反了里氏代换原则的设计,则有两种重构方案:
1.创建一个新的抽象类C,作为两个具体类的超类,将A和B的共同行为移动到C中。
2.从B到A的继承关系改写为委派关系。(CARP)
合成/聚合复用原则(CARP)
(CARP)就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新对象通过向这些对象的委派达到复用已有功能的目的。
合成和聚合的区别:二者均是关联的特殊种类。聚合用来标示“拥有”关系或整体与部分的关系;而合成则用来标示一种强得多的“拥有”
关系。在一个合成关系里,部分和整体的生命周期是一样的。一个合成的新的对象完全拥有对其组成部分的支配权,包括它们的创建和湮灭等。进一步讲,一个合成的多重性不能超过1,换言之,一个合成关系中的成分对象是不能与另外一个合成关系共享的。一个成分对象在同一时间内只能属于一个合成关系,如果一个合成关系湮灭了,那么所有的成分对象要么湮灭自己所有的成分对象,要么就得将这一责任交给别人(较为罕见)。
只有当每一个S在任何情况下都是一种B的时候,才可以将S设计成B的子类。如果两个类的关系是"Has-A"关系而不是"Is-A"关系,这两个类一定违反里氏代换原则。
只有两个类满足里氏代换原则时,才有可能是"Is-A"关系。
分享到:
评论

相关推荐

    里氏代换原则案例程序LSP.zip

    里氏代换原则案例程序LSP.zip

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

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

    SQL语句优化2

    开-闭原则(OCP):一个软件实体应当对扩展开放,对修改关闭。 ...合成/聚合复用原则(CARP):要尽量使用合成/聚合,尽量不要使用继承。 迪米特法则(LoD):一个对象应当对其他对象有尽可能少的了解

    java 设计模式与Jar库

    java 设计模式与Jar库 里氏代换原则LSP 依赖倒转原则DIP 接口隔离原则ISP 合成/聚合复用原则CARP

    PHP面向对象五大原则之里氏替换原则(LSP)详解

    主要介绍了PHP面向对象五大原则之里氏替换原则(LSP),较为详细的分析了里氏替换原则(LSP)的概念、原理并结合实例形式分析了php里氏替换原则(LSP)的简单使用方法,需要的朋友可以参考下

    OO设计原则-里氏替换原则

    OO设计原则 --OO设计的LSP里氏替换原则 ,所以使用基类代码的地方,用派生类代码替换后,能够正确的执行动作处理。 ◇ 换句话说,如果派生类替换了基类后,不能够正确执行动作,那么他们的继承关系就应该废除。

    面向对象六大设计原则

    1、“开-闭”原则(Open-Closed Principle,OCP) 2、里氏替换原则(Liskov Substitution Principle,LSP...5、合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP) 6、迪米特法则(Law of Demeter,LoD)

    principle_and_design:软件开发中可能需要遵守的原则和设计

    ├─lsp //里氏替换原则 http://c.biancheng.net/view/1324.html ├─dip //依赖倒置原则 http://c.biancheng.net/view/1326.html ├─SRP //单一职责原则 http://c.biancheng.net/view/1327.html ├─isp //接口...

    kth(块替换).lsp

    CAD块替换,画图替换非常好用,命令 KTH

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

    LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键...

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

    Java23种基本的设计模式整料整理学习源码示例zip Java23种基本的设计模式整料整理学习源码示例zip ...合成复用原则(Composite Reuse Principle) 原则是尽量使用合成/聚合的方式,而不是使用继承。

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

    1.5.5 合成/聚合复用原则(CARP) 9 1.5.6 迪米特法则(LAW OF DEMETER LOD) 10 1.5.7 单一职责原则(SIMPLE RESPONSIBILITY PINCIPLE SRP) 10 创建型模式 11 2.1 SINGLETON单件模式 11 2.1.1 典型的SINGLETON类 11 ...

    设计模式Demo

    LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键...

    面向对象设计原则(SRP,OCP,LSP,DIP,ISP)

    面向对象 设计原则 单一职责原则--SRP 开放封闭原则--OCP Liskov替换原则--LSP 依赖倒置原则--DIP 接口隔离原则--ISP

    LN-替换字体.lsp

    LN-替换字体.lsp

    3DARRAY.LSP

    3DARRAY.LSP

    Java_面向对象设计原则总结

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

    06_面向对象设计1

    1. 针对特定平台(编程语言、操作系统、数据库、框架、 2. 应用面向对象设计的原则与模式进行优化 1. 单一职责原则SRP 2. 里氏替换原则LSP 3. 依

    OOP的基本设计原则1

    二、里氏替换原则(LSP)【定义】继承必须确保超类所拥有的性质在子类中仍然成立 三、依赖倒置原则(DIP)【定义】高层模块不应该依赖低层模块,两者都应该依赖其抽

Global site tag (gtag.js) - Google Analytics