里氏替换原则(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"关系。
分享到:
相关推荐
开-闭原则(OCP):一个软件实体应当对扩展开放,对修改关闭。 ...合成/聚合复用原则(CARP):要尽量使用合成/聚合,尽量不要使用继承。 迪米特法则(LoD):一个对象应当对其他对象有尽可能少的了解
java 设计模式与Jar库 里氏代换原则LSP 依赖倒转原则DIP 接口隔离原则ISP 合成/聚合复用原则CARP
软件设计的七大原则是软件设计的精髓所在,这七大原则分别是开闭原则、里氏代换原则、依赖倒置原则、接口隔离原则、合成/聚合复用原则、迪米特法则和抽象类原则。 一、 开闭原则(OCP) 开闭原则是指一个软件实体...
这些原则包括开闭原则、里氏代换原则、依赖倒置原则、接口隔离原则、合成/聚合复用原则、迪米特法则和抽象类原则。这些原则的目的是为了提高软件系统的灵活性、适应性、稳定性和延续性。 一、 开闭原则(OCP) 开...
- **可插入性**:同样地,开-闭原则、里氏替换原则、依赖倒置原则和合成/聚合复用原则也有助于提高系统的可插入性。 通过这些原则的综合运用,可以帮助开发团队构建出更加健壮、灵活且易于维护的软件系统。
6、合成/聚合复用原则(CARP) 合成/聚合复用原则主张优先使用对象的组合/聚合,而非继承来实现复用。组合和聚合允许不同对象以松散耦合的方式协作,而继承可能导致紧密耦合和类层次结构的膨胀。例如,桥接模式利用...
在SOLID原则基础上,还有CARP(组合/聚合复用原则)和LoD(迪米特法则)。 - 单一职责原则(SRP):一个类应该只有一个引起它变化的原因,也就是说,一个类只做一件事。 - 开闭原则(OCP):软件实体(类、模块、...
DIP)、接口隔离原则(Interface Segregation Principle, ISP)以及合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)。 #### 1. 单一职责原则(Single Responsibility Principle, SRP) - **定义...
这七大原则包括单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则、依赖倒置原则、迪米特法则和合成/聚合复用原则。 单一职责原则(SRP)指出,一个类或模块应该只有一个改变的原因,这样可以避免因为一个...
1、“开-闭”原则(Open-Closed Principle,OCP) 2、里氏替换原则(Liskov Substitution Principle,LSP...5、合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP) 6、迪米特法则(Law of Demeter,LoD)
- **可插拔性**:通过应用开闭原则、里氏替换原则、依赖倒置原则和合成/聚合复用原则,可以更容易地替换或添加组件,而不会影响系统的其他部分。 #### 开放-封闭原则(OCP) 开放-封闭原则强调软件实体应该是可...
### 合成/聚合复用原则 (CARP) #### 定义 合成/聚合复用原则提倡使用对象组合或聚合的方式而不是继承来达到复用的目的。 #### 分析 - **原因**:与继承相比,使用对象组合或聚合的方式可以更好地控制耦合度,并且...
### 合成/聚合复用原则(CARP) 合成/聚合复用原则主张通过组合对象来实现复用,而不是通过继承。这是因为继承带来的紧密耦合往往会导致“脆弱的基类”问题,即基类的小改动可能会影响到所有继承它的子类。相比之下...
6. **合成/聚合复用原则(Composition/Aggregation Reuse Principle, CARP)** 宁愿使用对象的组合或聚合,而非继承来实现代码的复用。组合与聚合允许动态地改变对象结构,相比继承更加灵活,且不会破坏封装性。 ...
组合/聚合复用原则(Composite/Aggregate Reuse Principle,CARP) #### 4.1 原则描述 组合/聚合复用原则提倡通过组合或聚合的方式复用已有类,而不是通过继承。这种方式可以避免继承带来的潜在问题,如多态性...
#### 合成/聚合复用原则 (CARP) 合成/聚合复用原则提倡使用对象的组合或聚合而非继承来达到复用的目的。这种方法可以避免继承带来的问题,如紧耦合和多继承的复杂性。例如,如果需要设计一个“汽车”类,可以通过...
6. **合成/聚合复用原则 (Composition/Aggregation Reuse Principle, CARP)** 尽量使用合成或聚合,而非继承来实现代码的复用。因为继承会引入继承层次结构,可能导致紧耦合,而合成和聚合则允许更灵活的设计。 ...
6. **合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)** 这个原则提倡优先使用组合或聚合(对象的引用)而不是继承来实现复用。因为继承关系会形成强耦合,而组合或聚合则允许更大的灵活性和独立...
7. **合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)** - 优先使用对象的组合或聚合,而不是继承来达到代码复用的目的。继承通常会导致强耦合,而组合或聚合则更加灵活。 8. **YAGNI(You Aren'...