在我們學習面向對象程式設計的時候,總會出現一些問題,好比以前剛剛寫好的代碼,上線測試可以、正常運作,突然有一天說要加一個功能,改完之後,發現以前正常運作的功能不能用了,類似這樣的問題有好多好多,為了避免類似的事件發生,程式員一定要根據這些原則去開發程式。
我們一個一個來學習,今天來學習7大面向對象設計原則之一,合成複用原則。
合成複用原則:
合成複用原則(Composite Reuse Principle,CRP)又叫組合/聚合複用原則(Composition/Aggregate Reuse Principle,CARP)。它要求在軟體複用時,要盡量先使用組合或者聚合等關聯關系來實作,其次才考慮使用繼承關系來實作。
如果要使用繼承關系,則必須嚴格遵循裡氏替換原則。合成複用原則同裡氏替換原則相輔相成的,兩者都是開閉原則的具體實作規範。
我們來了解一下這段話,首先,我們得知道裡式替換原則,然後我們來看這個定義。
它這個原則是要我們先使用組合或者聚合實作,然後再使用繼承。我這裡舉例說明
我們就用汽車這個來說啊,我們現在汽車有很多種,電動汽車,汽油汽車,還有柴油車(路上跑的那種拉貨的好像就是柴油車)
車呢還有顔色區分,黃的白的綠的黑的。然後我們如果直接繼承的話就變成這樣了
從上圖可以看出用繼承關系實作會産生很多子類,而且如果我們再多一種新能源汽車,或者多上幾個顔色,我們還得去修改代碼,這樣做的話,就違背了開閉原則,這顯然不可取。我們如果把顔色當做一個屬性放入到汽車這個父類中,讓其他能源的汽車繼承的時候,自己去定義,這樣就好多了
合成複用原則的實作:
我其實上面在介紹的時候已經說了實作了。。
我這裡畫個圖,來配合我上面說的
這樣的話,如果多了一種黃色的汽油汽車,我們隻需要直接繼承汽油汽車,然後修改顔色就行。
我們不需要多弄一個黃色汽油汽車去繼承汽車了。
這裡要好好了解,千萬别弄懵了。
講述到這裡,我們的設計原則就講述完了,雖然就七個原則,但是能真正的做到,或者說真正的按照這些去寫代碼的人啊,所謂是少的可憐,但是,少歸少,我們一定要知道,盡量能保持這樣去做,如果有一天你的上司看不懂你代碼為啥這麼去弄,你就可以給他上一課!
在設計原則這門課程結束的時候,我打個廣告,我個人QQ,2100363119 别加錯了
大家可以加一下我的QQ,如果需要微信号的話,大家可以加我QQ之後,我私聊給你我的微信(為了防止有人惡意給我打騷擾電話),到時候我再建立一個群,大家可以再裡面探讨技術,問一些問題,閑聊啊。我以後也會給大家多更新一些資源,供大家學習,我們不為了技術而去學技術,隻為了能實作需求。