一.什么是合成/聚合复用原则? 合成/聚合复用原则是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的. 简述为:要尽量使用合成/聚合,尽量不要使用继承. 二.合成和聚合的区别:依赖和关联 合成(Composition)和聚合(Aggregation)都是关联(Association)的特殊种类.用C语言来讲,合成是值的聚合(Aggregation by Value),聚合是则是引用的聚合(Aggregation by Referen…
这个也好理解 ,这个合成/聚合复用原则指的是在一个新的对象里面使用一些已有的对象,使其成为新对象的一部分.新对象通过委派达到复用已有功能的效果. 说到这里要讲提及到“Has-A” 和“Is-A”的区别: Has-A:表示某一个角色具有某一项责任. Is-A:表示一个类是另一个类的一种. 看看这一个原则听好理解的哈,因为我也经常在做功能提取,比如提取一些公共的算法什么的.最后达到复用的目的,从而避免了复制代码. 可这里所说的意思好像要在我这个之上,这里的意思是针对一个个的对象,我们可以把某一个业务…
1.定义 简而言之,对于合成/聚合复用原则的定义就是:要尽量使用合成和聚合,尽量不要使用继承. 2.释义 为什么"要尽量使用合成和聚合.尽量不要使用继承"呢? 这是由于: 第一,继承复用破坏包装,它把父类的实现细节直接暴露给了子类,这违背了信息隐藏的原则:      第二:假设父类发生了改变.那么子类也要发生对应的改变.这就直接导致了类与类之间的高耦合,不利于类的扩展.复用.维护等,也带来了系统僵硬和脆弱的设计. 而用合成和聚合的时候新对象和已有对象的交互往往是通过接口或者抽象类进行的…
作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.定义:  要尽量使用合成和聚合,尽量不要使用继承. 2.使用场景: 要正确的选择合成/复用和继承,必须透彻地理解里氏替换原则和Coad法则.Coad法则由Peter Coad提出,总结了一些什么时候使用继承作为复用工具的条件. (1)Coad法则:只有当以下Coad条件全部被满足时,才应当使用继承关系: [1]子类是超类的一个特殊种类,而不是超类的一个角色.区分“Has-A”和“Is-A”.只有“Is-A”…
组合/聚合复用原则(Composite/Aggregate Reuse Principle或CARP),就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新对象通过向这些对象的委派达到复用已有功能的目的.这两种都是关联关系的一种,聚合表示整体与部分的关系,部分可以脱离整体作为独立个体存在:组合是一种更强的聚合,部分组成整体,但部分不可作为独立个体单独存在,部分的生命周期不能超过整体的生命周期.聚合好比电脑与鼠标,组合好比人与心脏.         组合/聚合与继承是实现复用的两个…
尽量使用对象组合,而不是继承来达到复用的目的 未完待续…
一.概念 CARP:CompositionAggregation Principle 合成聚合复用原则,尽量使用合成/聚合,尽量不使用类继承.合成聚合是“has  a”的关系,而继承是“is  a”的关系.由于继承是一中强耦合的结构,父类变,子类必变.所以不是“is  a”关系,我们一般不要用继承.优先使用合成聚合复用原则,有助于保持每个类的封装,降低继承的层次.合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的…
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式——建造者模式 [Head First设计模式]饺子馆(冬至)中的设计模式——工厂模式 [Head First设计模式]一个人的平安夜——单例模式 [Head First设计模式]抢票中的设计模式——代理模式 引言 今天突然跟朋友谈起设计原则,心里想想面向对象的设计原则与要素都有哪些?掰掰指头算算能说…
合成复用原则又称为组合/聚合复用原则(Composition/Aggregate Reuse Principle, CARP),其定义如下: 合成复用原则(Composite Reuse Principle, CRP):尽量使用对象组合,而不是继承来达到复用的目的. 合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分:新对象通过委派调用已有对象的方法达到复用功能的目的.简言之:复用时要尽量使用组合/聚合关系(关联关系),少用继承.…
开发一个系统并不是一件困难的事,但是为何维护好一个系统却是一件让人头疼不以的事?   在笔者的观念中这一切都源自于需求.   如果在软件开发完成之后,需求就不再改变,那大部分程序都不需要维护了.但是,事实呢,需求是变化的,而我们呢?也需要去拥抱这些变化.   因为需求的变化无常,使得某些系统的设计无法与新的需求相容.当这些破坏式的需求越来越多,一个系统也就慢慢的变的难以维护了.真的就无法避免这样的事情发生吗?当然不!   如果说我们在设计之初就为日后的变化留出了足够的空间,或者说,我们的设计一开…