设计模式的七大原则(7) --合成复用原则

前言

我们终于学习最后一个设计原则了,其实博主更新的还是挺慢的,因为我想一个一个吃透以后再继续学习,切记不要囫囵吞枣。

基本介绍

其实这个能说的内容很少,就是:尽量使用合成/聚合的方式,而不是使用继承

为什么要这样做?有一下两点原因:

  1. 通过继承来进行复用的主要问题在于继承复用会破坏系统的封装性,因为继承会将基类的实现细节暴露给子类,由于基类的内部细节通常对子类来说是可见的,所以这种复用又称“白箱”复用,如果基类发生改变,那么子类的实现也不得不发生改变;从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性;而且继承只能在有限的环境中使用(如类没有声明为不能被继承)。
  2. 由于组合或聚合关系可以将已有的对象(也可称为成员对象)纳入到新对象中,使之成为新对象的一部分,因此新对象可以调用已有对象的功能,这样做可以使得成员对象的内部实现细节对于新对象不可见,所以这种复用又称为“黑箱”复用,相对继承关系而言,其耦合度相对较低,成员对象的变化对新对象的影响不大,可以在新对象中根据实际需要有选择性地调用成员对象的操作;合成复用可以在运行时动态进行,新对象可以动态地引用与成员对象类型相同的其他对象。

这个跟里氏替换原则还是挺像的,里氏替换原则建议我们不要重写父类的方法。这个就更直接干脆了,干脆你也别继承算了。省的惹出一系列的事故出来。

总结

设计原则系列到这里就告一段落了,后面我们将更新设计模式新的系列—— 24中种具体的设计模式。但是在更新这个系列之前我们还有一个系列就是看懂UML图,我相信很多人对于UML图是不怎么看的懂的。对于依赖,组合,聚合,泛化等等都还是一知半解。后续待我一一道来。

哪有什么岁月静好,大家都是在负重前行。

各位,努力,奋斗!

原文地址:https://www.cnblogs.com/zhxiansheng/p/11342245.html

时间: 2024-07-30 13:41:55

设计模式的七大原则(7) --合成复用原则的相关文章

面向对象设计原则之合成复用原则

合成复用原则又称为组合/聚合复用原则(Composition/Aggregate Reuse Principle, CARP),其定义如下: 合成复用原则(Composite Reuse Principle, CRP):尽量使用对象组合,而不是继承来达到复用的目的. 合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分:新对象通过委派调用已有对象的方法达到复用功能的目的.简言之:复用时要尽量使用组合/聚合关系(关联关系),少用继承.

融会贯通——最常用的“合成复用原则”技能点Get

复用一个类的时候,多使用对象的组合/聚合的关联关系,而不是继承. 之前提到的"依赖倒转原则",是以里氏代换原则为基础的实现开闭原则目标的手段,这一条路线涉及到的是类的继承(包括单继承和接口实现),他们支撑了Java多态的特性. 但是今天要谈一谈Java另一个特性--封装.封装就是不要暴露过多的基类内部细节给子类,让高层的操作神秘起来,不让小兵知道.合成复用原则体现的就是封装的特性. 所以可以推论出,多使用对象的组合/聚合关系,而不是继承,从而实现不会暴露过多的基类操作细节给子类的目的.

小菜学设计模式——合成复用原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成长之旅. 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:合成复用原则 书面理解 合成复用原则:要尽量使用合成/聚合,尽量不要使用继承. 对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现.子类

【设计模式】 (1)设计模式的七大原则

在我们的称后续的编写过程中,我们会面临着来自耦合.内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式为了让程序具有更好的: 代码重用性(即相同功能的代码,不用多次编写) 可读性(即:编程规范,便于其他人阅读理解) 可靠性(即:当我们增加新功能是,非常方便,对原来的功能没有影响) 使程序实现高内聚,低耦合的特性 设计模式的七大原则 不要问为什么设计模式要这么去设计,这个只是设计模式的一个开发规范,你不遵守也没关系,但是我们应该去遵守这个规范,方便你我他. 单一职责原则 基本介绍

设计模式的七大原则

软间的可维护性和可复用性 知名软件大师Robert C.Martin认为一个可维护性(Maintainability) 较低的软件设计,通常由于如下4个原因造成: ?过于僵硬(Rigidity) ?过于脆弱(Fragility) ?复用率低(Immobility) ?黏度过高(Viscosity) 软件工程和建模大师Peter Coad认为,一个好的系统设计应该具备如下三个性质: ?可扩展性(Extensibility) ?灵活性(Flexibility) ?可插入性(Pluggability)

面向对象设计原则之六:组合/聚集复用原则

组合/聚合复用原则(Composite/Aggregate Reuse Principle CARP).组合和聚合都是对象建模中关联(Association)关系的一种.聚合表示整体与部分的关系,表示"含有",整体由部分组合而成,部分可以脱离整体作为一个独立的个体存在.组合则是一种更强的聚合,部分组成整体,而且不可分割,部分不能脱离整体而单独存在.在合成关系中,部分和整体的生命周期一样,组合的新的对象完全支配其组成部分,包括他们的创建和销毁.一个合成关系中成分对象是不能与另外一个合成关

java设计模式:面向对象设计的7个原则

在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件开发效率,节约软件开发成本和维护成本. 这7条原则分别是:开闭原则.里氏替换原则.依赖倒置原则.单一职责原则.接口隔离原则.迪米特法则.合成复用原则. 接下来是对这7个原则的详细介绍. 开闭原则(OCP,Open Closed Principle) 定义 开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他

设计模式六大原则——合成/聚合复用原则(CARP)

1.定义 简而言之,对于合成/聚合复用原则的定义就是:要尽量使用合成和聚合,尽量不要使用继承. 2.释义 为什么"要尽量使用合成和聚合,尽量不要使用继承"呢? 这是因为: 第一,继承复用破坏包装,它把父类的实现细节直接暴露给了子类,这违背了信息隐藏的原则: 第二:如果父类发生了改变,那么子类也要发生相应的改变,这就直接导致了类与类之间的高耦合,不利于类的扩展.复用.维护等,也带来了系统僵硬和脆弱的设计.而用合成和聚合的时候新对象和已有对象的交互往往是通过接口或者抽象类进行的,就可以很好

大话设计模式笔记 合成/聚合复用原则

合成/聚合复用原则,尽量使用合成/聚合,尽量不要使用类继承. 聚合(Aggregation)表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象但B对象不是A对象的一部分. 合成(Composition)则是一种强的'拥有'关系,体现了严格的部分和整体关系,部分和整体的生命周期一样. 优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上,这样类和类继承层次会保持较小规模,而且不太可能增长为不可控制的庞然大物. 继承是一种强耦合的结构.子类随父类改变而改变,一定要在是‘is-