簡而言之,對于合成/聚合複用原則的定義就是:要盡量使用合成和聚合,盡量不要使用繼承。
為什麼“要盡量使用合成和聚合,盡量不要使用繼承”呢?
這是因為:
第一,繼承複用破壞包裝,它把父類的實作細節直接暴露給了子類,這違背了資訊隐藏的原則;
第二:如果父類發生了改變,那麼子類也要發生相應的改變,這就直接導緻了類與類之間的高耦合,不利于類的擴充、複用、維護等,也帶來了系統僵硬和脆弱的設計。而用合成和聚合的時候新對象和已有對象的互動往往是通過接口或者抽象類進行的,就可以很好的避免上面的不足,而且這也可以讓每一個新的類專注于實作自己的任務,符合單一職責原則。
兩種判斷方法:
“Is-A”代表一個類是另外一個類的一種,可以使用繼承關系,如下圖
而“Has-A”代表一個類是另外一個類的一個角色,而不是另外一個類的特殊種類。如下圖
裡氏代換原則是繼承複用的基礎。
關于裡氏代換原則的介紹:http://blog.csdn.net/zlts000/article/details/26961047