合成/聚合复用原则经常又叫做合成复用原则,就在在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过向这些对象的委派达到复用已有功能的目的,这个设计原则有另一个更加简短的表述,要尽量使用合成/聚合,尽量不要使用继承.
我们通常不在新的对象里面拥有需要的对象,而应当最好拥有对象所在的工厂,这样又把工厂模式应用过来,这是我的灵感..^-^
一:复用的基本类型
A:合成/聚合复用,由于合成或聚合可以将已有的对象纳入到新对象中,使之成为新对象的一部分,因此新的对象可以调用已有对象的功能,这样做有下面好处:
(1)新对象存取成分对象的唯一方法是通过成分对象的接口
(2)这种复用可以在运行时间内动态进行,新对象可以动态地引用与成分对象类型相同的对象
(3)这种复用是黑箱复用,因为成分对象的
.......
B:通过继承达到复用的目的
继承的优点是修改或扩展继承而来的实现较为容易,它有如下缺点:
(1)因为继承超类的实现细节暴露给子类,所以继承破坏了封装性,因此又称为"白箱"复用
(2)当修改基类时,使得我们不得不修改子类.
(3)从超类继承而来的实现是静态的,不可能在运行时间内发生改变,因此没有足够的灵活性.
二:区分"Has-A"与"Is-A"
"Has-A"是严格的分类学意义上的定义,意思是一个类是另一个类的"一种",而"Has-A"则不同,它表示某一个角色具有某一项责任。
有一个人类H,请看下面一个例子,假如我们再设计三个类:雇员类E,经理类M,学生类S,如果我们把这三个类都继承H的话会出现什么问题?实际上雇员,经理,学生分别描述了一种角色,而人可以同时有不同的角色。比如一个人既然是经理就必然是雇员,而此人可能同时参加了MBA课程,从而也是一个学生,使用继承来实现角色,则只能使每一个人具有Has-A角色,而且继承是静态的,这会使得一个人在成为雇员身份后,就永远为雇员,不能称为经理或学生,这显然是不合理的。
纠正:我们应当在加一个角色类R,人通过R可以得到不同的角色。
这就是说,当一个类是另一个类的角色时,不应当使用继承来描述这种关系。
分享到:
相关推荐
合成聚合复用原则,简称CARP或CRP,是面向对象设计中的一项重要原则,它强调在构建新对象时应优先考虑使用已有对象的合成和聚合,而不是通过继承来达到复用目的。这一原则旨在降低类之间的耦合度,提高系统的可维护...
10:合成/聚合复用原则;11:迪米特法原则;12:简单工厂模式;13:工厂方法模式;14:抽象工厂模式;15:单例模式;16:单例模式与MX记录;17:多例模式;18:序列健生成器与单例及多例模式;19:建筑模式;20:原始模型模式;21:...
合成聚合复用原则 合成聚合复用原则(Composition/Aggregate Reuse Principle, CARP)是一种面向对象设计原则,旨在指导开发者在设计中如何复用已有的对象。该原则强调在复用时,应该尽量使用组合/聚合关系,而不是...
桥接模式 Bridge:将抽象部分与他的实现部分分离,使他们都可以独立的变化合成/聚合复用原则: 尽量使用合成/聚合,尽量不要使用继承解释:什么叫抽象与他的实现分离,并不是说,让抽象类与其派生类分离,因为这就没有任何...
开-闭原则(OCP):一个软件实体应当对扩展开放,对修改关闭。 ...合成/聚合复用原则(CARP):要尽量使用合成/聚合,尽量不要使用继承。 迪米特法则(LoD):一个对象应当对其他对象有尽可能少的了解
合成复用原则(Composite Reuse Principle,CRP),又称组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP),是在面向对象设计中的一项重要指导原则。该原则强调:在进行软件复用时,应优先考虑使用...
DIP)、接口隔离原则(Interface Segregation Principle, ISP)以及合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)。 #### 1. 单一职责原则(Single Responsibility Principle, SRP) - **定义...
软件设计的七大原则是软件设计的精髓所在,这七大原则分别是开闭原则、里氏代换原则、依赖倒置原则、接口隔离原则、合成/聚合复用原则、迪米特法则和抽象类原则。 一、 开闭原则(OCP) 开闭原则是指一个软件实体...
对面向对象设计原则的总结,设计模式:“开-闭”原则,里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特法则、接口隔离原则
这些原则包括开闭原则、里氏代换原则、依赖倒置原则、接口隔离原则、合成/聚合复用原则、迪米特法则和抽象类原则。这些原则的目的是为了提高软件系统的灵活性、适应性、稳定性和延续性。 一、 开闭原则(OCP) 开...
java八股文
java 设计模式与Jar库 里氏代换原则LSP 依赖倒转原则DIP 接口隔离原则ISP 合成/聚合复用原则CARP
合成/聚合复用原则主张优先使用对象的组合/聚合,而非继承来实现复用。组合和聚合允许不同对象以松散耦合的方式协作,而继承可能导致紧密耦合和类层次结构的膨胀。例如,桥接模式利用了合成/聚合,将抽象部分和实现...
为了达到这一目标,我们需要遵循一些基本原则,如"开-闭"原则、单一职责原则、里氏代换原则、依赖倒转原则、接口隔离原则、合成/聚合复用原则和迪米特法则。 2. **开-闭原则**: - 这个原则指出,软件实体(如类、...
在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”...替代继承特性的方式,较多的会采用 合成/聚合复用原则,“合成/聚合复用原则”:尽量使用合成/聚
第10章 合成/聚合复用原则 第11章 迪米特法则 第三部分 第12章 简单工厂模式 第13章 工厂方法模式 第14章 抽象工厂模式 第15章 单例模式 第16章 专题:单例模式与MX记录 第17章 专题:多例(Multiton)模式与多语言...
合成/聚合复用原则建议通过合成或者聚合的方式复用已有的代码,而不是通过继承来实现复用。与单一职责原则和优先利用组合而非继承的原则相辅相成,这一原则提倡使用对象组合的方式来构建复杂功能,而不是仅仅依赖于...
7. **合成复用原则**:优先使用对象的组合或聚合,而不是继承来实现软件复用。组合比继承更具灵活性,因为组合允许在运行时动态地改变对象的行为,而继承则是在编译时固定的。 这些原则共同构成了面向对象设计的...
- **可插拔性**:通过应用开闭原则、里氏替换原则、依赖倒置原则和合成/聚合复用原则,可以更容易地替换或添加组件,而不会影响系统的其他部分。 #### 开放-封闭原则(OCP) 开放-封闭原则强调软件实体应该是可...