合成复用原则(CRP)
合成复用原则(Composite Reuse Principle, CRP):尽量使用对象组合/聚合,而不是继承来达到复用的目的。 优点: 使系统更加灵活,降低类于类之间的耦合度,一个类的变化对其他类造成的影响相对较小。 缺点: 破坏了包装,同时包含的类的实现细节被隐藏。
聚合/组合
组合和聚合到底有什么区别呢?下面我们拿出一点时间来对这两个概念进行一下简单的区分。下面我们引入一个代码场景。 A类中包含了B类的一个引用,当A的一个对象消失时,B对象所指向的这个引用也就随之消失了,因为没有任何一个引用指向它,就被GC了。这种情况就叫做组合。反过来想,B类创建的对象,所指向的引用,如果还有另外一个引用指向它,这种情况就叫做聚合。因为A类消失后,B类所创建的对象没有消失。 也就是说,组合关系的类,具有同样的生命周期。
下面我们从代码上区分一下聚合和组合的关系。
public class BirdGroup
{
public Bird bird;
public BirdGroup(Bird bird)
{
this.bird = bird;
}
}聚合关系的类里有另外一个类作为参数。BirdGroup类被gc之后,bird类的引用依然建在。这就是聚合。
public class Bird
{
public Wings wings;
public Bird()
{
wings=new Wings();
}
}组合关系的类里有另外一个类的实例化,如果Bird这个类被GC了,内部的类的引用,随之消失了,这就是组合。
Golang Demo
Java Demo
UML

补充另一个版本的Java/Scala Demo 以及源码解析
Java Demo_
Scala Demo
UML_
源码解析
Last updated
Was this helpful?