P6:合成复用原则(CRP)

合成复用原则,Composite Reuse Principle,简称CRP.

一、定义

在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。简单来说就是:尽量使用合成/聚合,尽量不要使用继承。

1、合成:

合成表示一种强的拥有关系,同生同灭。比如: 一个人新出生的人,人有两个胳膊,胳膊和人就是部分和整体的关系。人去世了,那么胳膊也就没用了,也就是说胳膊和人的生命周期是相同的。

class People {
	  //类似这种结构属于合成关系
      Hand hand = new Hand();
      Foot foot = new Foot();
}
2、聚合:

聚合表示“拥有”关系或者整体与部分的关系,是一种弱拥有的包含关系。比如,一个人拥有鞋子和帽子,人与鞋子、帽子就属于聚合关系。

class People {
	  //类似这种结构属于聚合关系,通过构造器从外界传入聚合的元素,这个元素可以存在,也可以为null;
      Shoes shoe;
      Hat hat;
	public Person(Shoes shoe,Hat hat){      
        this.shoe = shoe;
        this.hat = hat;        
    }
}

二、两类合成模式的区别:

实现合成主要可以通过继承和合成/聚合两类手段,由于继承的使用存在以下缺点:

	1.打破了封装性,子类依赖于超类的实现细节,和超类高度耦合;
	2.超类更新后可能会导致错误,维护成本很高。

基于这个原因,一般建议使用合成/聚合来实现组成。

END.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章