1天之前,終究將設(shè)計模式的第2遍看完了。。在這兩遍中,我又學(xué)到了很多知識。在之前看OOTV設(shè)計大賽時,總是提到面向?qū)ο笤O(shè)計的原則,這讓我不明所以,直到看完全本書以后,才知道書中自有黃金屋。。這篇文章主要寫的就是面向?qū)ο笤O(shè)計的6大原則。
根據(jù)上圖,我們可以輕松地得出,面向?qū)ο笤O(shè)計是以高內(nèi)聚、低耦合為設(shè)計核心,抽象為基礎(chǔ),封裝、繼承和多態(tài)為特點。綜合面向?qū)ο蟮脑瓌t、基礎(chǔ)和特點,我們總結(jié)出了它的6大原則。通過這6大原則,我們還可以演變出多種設(shè)計模式。。下面就寫1下我對這6大原則的理解。。
依賴倒轉(zhuǎn)
是面向?qū)ο蟮臉?biāo)志!用哪一種語言來編寫程序不重要,重要的是程序中的依賴關(guān)系都是終止于抽象類或接口,這就是面向?qū)ο蟮脑O(shè)計。
定義
1、 高層模塊不應(yīng)當(dāng)依賴低層模塊,兩個都應(yīng)當(dāng)依賴抽象
2、 抽象不應(yīng)當(dāng)依賴細(xì)節(jié),細(xì)節(jié)應(yīng)當(dāng)依賴抽象
單1職責(zé)
如果1個類承當(dāng)過量的職責(zé),就等于把這些職責(zé)耦合在1起。1個職責(zé)的變化可能會削弱或抑制這個類完成其他職責(zé)的能力。所以,軟件設(shè)計真正要做的,就是發(fā)現(xiàn)職責(zé)并把那些職責(zé)相互分離。
定義
就1個類而言,應(yīng)當(dāng)唯一1個引發(fā)它變化的緣由
迪米特
這個原則的條件是在類的結(jié)構(gòu)設(shè)計上,每個類都應(yīng)當(dāng)盡可能下降成員的訪問權(quán)限。其根本思想,是強調(diào)類之間的弱耦合。類之間的耦合越弱,越有益于復(fù)用,1個處在弱耦合的類被修改,不會對有關(guān)系的類造成較大波及。
定義
1、如果兩個類沒必要彼此直接通訊,那末這兩個類就不應(yīng)當(dāng)產(chǎn)生直接的相互作用
2、如果其中1個類需要調(diào)用另外一個類的某1個方法,可以通過第3者轉(zhuǎn)發(fā)這個調(diào)用。
合成/聚合復(fù)用
它的優(yōu)點是,有助于保持每一個類被封裝,并被集中在單個任務(wù)上。這樣1來,就會下降繼承所帶來的強耦合,使程序不太可能增長為不可控制的龐然大物。
定義
盡可能使用合成/聚合,盡可能不要使用類繼承
里氏代換
如果1個軟件的實體使用的是1個父類的話,那末就1定適用于其子類,并且,發(fā)覺不出父類和子類對象的區(qū)分。更直白的說,就是在軟件里面,把父類都替換成它的子類,程序的行動沒有變化。
定義
子類型必須能夠替換掉他們的父類型。
正是由于有了里氏代換原則,才使得下面的開放封閉成為可能。由于子類的可替換性才使得父類的模塊在無需修改的情況下可以擴大。
開放封閉
不管模塊是多么的“封閉”,都會存在1些沒法對之封閉的變化。既然不可能完全封閉,設(shè)計人員就必須先猜想出最有可能產(chǎn)生的變化,然后構(gòu)造抽象來隔離那些變化。
開放封閉原則是面向?qū)ο笤O(shè)計的重點所在。開發(fā)人員應(yīng)當(dāng)僅對程序中,顯現(xiàn)出頻繁變化的那些部份做出抽象。
定義
面對需求的更新,對程序的改動是通過增加新代碼進行的,而不是更改現(xiàn)有的代碼。
小結(jié)
6大設(shè)計原則是面向?qū)ο蠹夹g(shù)的演變,可以理解為是對面向?qū)ο蟮睦^承。通過結(jié)合這6大原則,我們再對23種設(shè)計模式進行理解,那就事半功倍了。這又是米老師的思想,宏觀把控,微觀細(xì)化。米老師真是無處不在呀。。