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