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