推薦書藉
面向?qū)ο笤O(shè)計(jì)原則(8個(gè)原則)
1.依賴倒置原則(DIP)
?高層模塊(穩(wěn)定)不應(yīng)該依賴于低層模塊(變化)秩冈,二者都應(yīng)該依賴于抽象(穩(wěn)定)本缠。
?抽象(穩(wěn)定)不應(yīng)該依賴于實(shí)現(xiàn)細(xì)節(jié)(變化),實(shí)現(xiàn)細(xì)節(jié)應(yīng)該依賴于抽象(穩(wěn)定)入问。
(“shape”是個(gè)抽象類丹锹,所以它要被調(diào)用的時(shí)候,應(yīng)該聲明為指針队他,這樣才可以指向不同的子類卷仑。)
2.開放封閉原則(OCP)
?對(duì)擴(kuò)展開放,對(duì)更改封閉麸折。(不要更改锡凝,而是去擴(kuò)展)
?類模塊應(yīng)該是可擴(kuò)展的,但是不可修改垢啼。
(就是說(shuō)一個(gè)產(chǎn)品做出來(lái)了窜锯,但要應(yīng)對(duì)變化時(shí),它只要增加一些東西就可以改變功能)
3.單一職責(zé)原則(SRP)
?一個(gè)類應(yīng)該僅有一個(gè)引起它變化的原因芭析。
?變化的方向隱含著類的責(zé)任锚扎。
(不要讓一個(gè)類擁有過(guò)多的功能,如果一個(gè)類擁有七八個(gè)和多個(gè)重載時(shí)馁启,在一些特定的情況下會(huì)出現(xiàn)問題)
4.Liskov替換原則(LSP)
?子類必須能夠替換它們的基類(IS-A)驾孔。
?繼承表達(dá)類抽象。
(就是說(shuō)子類一定是會(huì)擁有父類的所有特征)
5.接口隔離原則(ISP)
?不應(yīng)該強(qiáng)迫客戶程序依賴它們不用的方法惯疙。
?接口應(yīng)該小而完備翠勉。
(不要將過(guò)多的功能public,把一些真正有需要的成員才public)
6.優(yōu)先使用對(duì)象組合霉颠,而不是類繼承
?類繼承通常為“白條復(fù)用”对碌,對(duì)象組合通常為“國(guó)十條復(fù)用”
?繼承在某程度上破壞了封裝性,子類父類耦合度高蒿偎。
?而對(duì)象組合則只要求被組合的對(duì)象具有良好定義的接口朽们,耦合度低怀读。
7.封閉變化點(diǎn)
?使用封裝來(lái)創(chuàng)建對(duì)象之間的分界層,讓設(shè)計(jì)者可以在分界層的一側(cè)進(jìn)行修改骑脱,而不會(huì)對(duì)別一側(cè)產(chǎn)生不良的影響菜枷,從而實(shí)現(xiàn)層次間的松耦合。
(封裝的傳統(tǒng)基層理解是“封裝數(shù)據(jù)和代碼”惜姐,但更高層次理解為“封裝變化點(diǎn)”)
8.會(huì)對(duì)接口編程犁跪,而不是針對(duì)實(shí)現(xiàn)編程
?還將變量類型聲明為某個(gè)特定的具體類,而是聲明為某個(gè)接口歹袁。
?客戶程序無(wú)需獲知對(duì)象的具體類型坷衍,只需要知道對(duì)象所具有的接口。
?減少系統(tǒng)中各部分的依賴關(guān)系条舔,從而實(shí)現(xiàn)“高內(nèi)聚枫耳、松耦合”的類型設(shè)計(jì)方案。