淺讀《大話設(shè)計(jì)模式》————5、會(huì)修電腦不會(huì)修收音機(jī)?——依賴倒轉(zhuǎn)原則
電腦比收音機(jī)簡單嗎?為什么拆開兩者,很明顯,收音機(jī)看起來還要比電腦更復(fù)雜呢?原來,好的架構(gòu)好的設(shè)計(jì)在哪里都是通用的!電腦各部件缺一不可,但是絕不是只針對(duì)某一個(gè)或者某一類產(chǎn)品,所有不同產(chǎn)品的廠商都只服從一個(gè)統(tǒng)一的標(biāo)準(zhǔn),這樣,我們就看不出電腦中哪一個(gè)是高層了。CPU?內(nèi)存?或者主板?。。。都不是,誰也不依賴誰,依賴的是一個(gè)統(tǒng)一的接口標(biāo)準(zhǔn)!
依賴倒轉(zhuǎn)原則:抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴抽象。具體到一個(gè)實(shí)際問題編程,應(yīng)該是定義好的接口,這個(gè)接口不屬于哪一個(gè)具體的東西,應(yīng)該是一個(gè)高層的抽象,然后就是針對(duì)接口編程,而不要對(duì)實(shí)現(xiàn)編程。
講到這里,似乎世界的一切問題都迎刃而解,一切顯得是那樣的輕而易舉!慢!一定不要自負(fù)的輕視對(duì)手,好,誰都很聽話的服從這個(gè)抽象接口,那么這個(gè)抽象接口怎么來?一切都在變,難道這個(gè)抽象類就是可以違背這個(gè)哲學(xué)上絕對(duì)真理的特例家伙?他可能自身都要不停的變!完了,到哪里去找這樣一根標(biāo)尺呀?
標(biāo)尺也是自己定義的!無非是會(huì)需要隨實(shí)際情況變化嗎?不要忘了,我們已經(jīng)學(xué)會(huì)的絕技——開放—封閉原則。我們保證提供基本功能的接口不變,實(shí)際需求增加時(shí),只要做開放擴(kuò)展即可,面向?qū)ο蟮睦^承能幫助我們找到正確適用實(shí)際問題的方法,問題不就解決了嗎?恩,這樣設(shè)計(jì)總結(jié)出統(tǒng)一的抽象接口或者抽象類是滿足我們的需求的,不過,還有關(guān)鍵的一點(diǎn),這一系列類必須要滿足一個(gè)原則:里氏代換原則:子類型必須能夠替換掉他們的父類型。這個(gè)原則在許多別的情況下,并不一定是完全滿足的,但是此處用做標(biāo)尺的抽象類,必須要滿足!子類可以擴(kuò)展做更多的事情,但是父類已經(jīng)定義好的接口子類必須有實(shí)現(xiàn),并且也必須是做一致的事情。
依賴倒轉(zhuǎn)原則說明了:好的面向?qū)ο笤O(shè)計(jì)不應(yīng)該是依賴具體實(shí)現(xiàn)中的那一部分,應(yīng)該是針對(duì)抽象編程而不是針對(duì)細(xì)節(jié)編程,即程序中所有的依賴關(guān)系都是終止于抽象類或者接口。那樣,高層、底層的改變都不會(huì)導(dǎo)致另外一部分要做變化了。
從北京去紐約嘍,;-),還有陸路還要海洋,哈哈,變化再大我也不管,因?yàn)槲易龅氖秋w機(jī)!不過,你要是愿意先客車再渡輪也可以的哦~都是交通工具的抽象嘛!應(yīng)該不會(huì)還有那個(gè)大俠想著依賴道路的,先穿跑鞋再換個(gè)泳衣去的吧~