繼續(xù)我們的系列。
三原則的內(nèi)容和基本內(nèi)容就不談了,說(shuō)出來(lái)都得被罵矯情泽篮。讓我們直接進(jìn)入正題。
1. 封裝
封裝柑船,也就是黑盒了帽撑。這里我們回顧下核心準(zhǔn)則就明了了——“相比較應(yīng)該知道自己該知道什么,清楚地認(rèn)識(shí)到自己不該知道什么甚至更重要鞍时。因?yàn)榍罢咭话闳硕蓟蚨嗷蛏僦酪徊糠挚骼笳咝枰母嗍亲孕拧6液雎缘羝渌?xì)節(jié)才能讓我們集中全部精力解決我們真正關(guān)心的問題”逆巍。
封裝的含義上面這段話基本解釋得很清楚了:
- 從使用者的角度來(lái)說(shuō)就是我對(duì)這里面的實(shí)現(xiàn)細(xì)節(jié)不關(guān)心专筷,你直接告訴我你要些啥才能給我所想要的結(jié)果。
- 而從服務(wù)者的角度則是這里面的邏輯你就別關(guān)心了蒸苇,我會(huì)保證結(jié)果正確的磷蛹。而且搞不好以后我還會(huì)換種實(shí)現(xiàn)方式。
2. 繼承
最主要的職責(zé)就是避免重復(fù)了溪烤。類似《Clean Code》味咳,《程序員修煉之道——從小工到專家》等極其多的名著里都一再?gòu)?qiáng)調(diào)重復(fù)的危害。而《Clean Code》甚至直接斷言”軟件行業(yè)里的大部分改進(jìn)就是為了消除重復(fù)”檬嘀。
3. 多態(tài)
”同樣的行為作用于不同的個(gè)體產(chǎn)生不同的效果”槽驶。以上是生物學(xué)上對(duì)多態(tài)的定義。(當(dāng)初小白入行鸳兽,為了搞懂多態(tài)的定義掂铐,居然死磕著把定義背下來(lái)了。嗯,青春歲月全陨。)
關(guān)于這個(gè)OOP原則爆班,就涉及到另外一個(gè)核心原則——“推遲作出決定的時(shí)機(jī)”。這里我得引用下我之前一篇文章里的論點(diǎn)了:
- 很多時(shí)候我們不想要被此時(shí)的決定束縛住手腳辱姨,導(dǎo)致之后的工作因當(dāng)前的決定而步履維艱柿菩。但我們又必須作出某種決定以便讓接下來(lái)的工作得以進(jìn)行,于是我們可以假裝實(shí)現(xiàn)了這個(gè)功能(假裝已經(jīng)做出了這個(gè)決定)來(lái)讓工作得以繼續(xù); 待到真正需要這個(gè)功能時(shí)雨涛,才去實(shí)現(xiàn)它(真正地做出來(lái)決定)枢舶。使用這種方法可以讓我們的程序變得非常穩(wěn)固,能夠自如地應(yīng)對(duì)外界的變化替久。
- 上面的”假裝實(shí)現(xiàn)了這個(gè)功能”的另外一種說(shuō)法叫做“wishful thinking”凉泄。有興趣的讀者可以了解下,很有意思的蚯根『笾冢或者直接看本人底部的鏈接。而”假裝實(shí)現(xiàn)了這個(gè)功能”的一種實(shí)現(xiàn)方式就是聲明一個(gè)接口稼锅。
- 而建立接口的目的就是為了推遲作決定的時(shí)機(jī)。
- 定義接口就是假裝作出了這個(gè)決定僚纷。
- 而實(shí)現(xiàn)接口則是真正地作出這個(gè)決定矩距。
- 上面兩個(gè)行為是有時(shí)間差的。而且這個(gè)時(shí)間差越大怖竭,你的程序就越靈活锥债。
- 熟悉Java的同學(xué)應(yīng)該都知道多態(tài)屬于一種 動(dòng)態(tài)綁定 吧。所謂的動(dòng)態(tài)綁定不就是到真正需要的時(shí)候才去找實(shí)現(xiàn)者嗎痊臭?