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.

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