一:OOP六大原則
1.設計模式的目的
編寫軟件過程中,程序員面臨着來自耦合性,內聚性以及可維護性,可擴展性,重用性,靈活性等多方面的挑戰,設計模式是為了讓程序(軟件),具有更好
1)代碼重用性(即:相同功能的代碼,不用多次編寫)
2)可讀性(即:編程規范性,便於其他程序員的閱讀和理解)
3)可擴展性(即:當需要增加新的功能時,非常的方便,稱為可維護)
4)可靠性(即:當我們增加新的功能后,對原來的功能沒有影響)
5)使程序呈現高內聚,低耦合的特性
2.OOP六大原則
設計模式原則,其實就是程序員在編程時,應當遵守的原則,也是各種設計模式的基礎(即:設計模式為什么這樣設計的依據)
設計模式常用的七大原則有:
1)單一職責原則
2)接口隔離原則
3)依賴倒轉原則
4)里氏替換原則
5)開閉原則
6)迪米特法則
7)合成復用原則 --擴展
3.單一職責原則
1.介紹:一個類應該只負責一項職責
2.注意事項和細節:
1)降低類的復雜度,一個類只負責一項職責。
2)提高類的可讀性,可維護性
3)降低變更引起的風險
4)通常情況下,我們應當遵守單一職責原則,只有邏輯足夠簡單,才可以在代碼級違反單一職責原則;只有類中方法數量足夠少,可以在方法級別保持單一職責原則
4.接口隔離原則
介紹:一個類對另一個類的依賴應該建立在最小的接口上

傳統方法的問題:類A通過接口Interface依賴類B,類C通過接口Interface依賴類D,如果接口Interface對於類A和類c來說不是最小接口,那么類B和類D必須去實現他們不需要的方法
接口隔離原則改進:接口interface中出現的方法,按實際情況拆分為多個接口
5.依賴倒轉原則
1.介紹:
1)細節應該依賴抽象
2)中心思想:面向接口編程
3)設計理念:相對於細節的多變性,抽象的東西要穩定的多。以抽象為基礎搭建的架構比以細節為基礎的架構要穩定的多。在java中,抽象指的是接口或抽象類,細節就是具體的實現類
4)使用接口或抽象類的目的是制定好規范,而不涉及任何具體的操作,把展現細節的任務交給他們的實現類去完成
2.依賴關系傳遞的三種方式:
1)接口傳遞
2)構造方法傳遞
3)setter方式傳遞
3.注意事項和細節:
1)低層模塊盡量都要有抽象類或接口,或者兩者都有,程序穩定性更好.
2)變量的聲明類型盡量是抽象類或接口,這樣我們的變量引用和實際對象間,就存在一個緩沖層,利於程序擴展和優化
3)繼承時遵循里氏替換原則
6.里氏替換原則
1.oo中的繼承性的思考和說明:
繼承在給程序設計帶來便利的同時,也帶來了弊端。比如使用繼承會給程序帶來侵入性,程序的可移植性降低,·增加對象間的耦合性,如果一個類被其他的類所繼承,則當這個類需要修改時,必須考慮到所有的子類,並且義類修改后,所有涉及到子類的功能都有可能產生故障
2.介紹:
1)所有引用基類的地方必須能透明地使用其子類的對象
2)使用繼承時,在子類中盡量不要重寫父類的方法
3)里氏原則告訴我們,繼承實際讓兩個類耦合性增強了,在適當情況下,可以通過聚合,組合,依賴來解決問題
3.解決方法:
1)在實際編程中,我們常常會通過重寫父類的方法完成新的功能,這樣寫起來雖然簡單,但整個繼承體系的復用性會比較差。特別是運行多態比較頻繁的時候
2)方法:原來的父類和子類都繼承一個更通俗的基類,原有的繼承關系去掉,采用依賴,聚合,組合等關系代替。
7.開閉原則
1.介紹:
1)開閉原則是編程中最基礎,最重要的設計原則
2)類,模塊和函數應該對擴展開放(提供方),對修改關閉(使用方)。用抽象構建框架,用實現擴展細節。(即當給類增加新功能時,盡量不修改代碼,或盡可能少修改代碼)
3)當軟件需要變化時,盡量通過擴展軟件實體的行為來實現變化,而不是通過修改已有的代碼來實現變化
8.迪米特法則
1.介紹:
1)迪米特法則(Demeter Principle)又叫最少知道原則,即一個類對自己依賴的類知道的越少越好。也就是說,對於被依賴的類不管多么復雜,都盡量將邏輯封裝在類的內部。對外除了提供的public方法,不對外泄露任何信息
2)迪米特法則還有個更簡單的定義:只與直接的朋友通信
3)直接的朋友:每個對象都會與其他對象有耦合關系,只要兩個對象之間有耦合關系,我們就說這兩個對象之間是朋友關系。耦合的方式很多,依賴,關聯,組合,聚合等。其中,我們稱出現成員變量,方法參數,方法返回值中的類為直接的朋友,而出現在局部變量中的類不是直接的朋友。也就是說,陌生的類最好不要以局部變量的形式出現在類的內部。
2.注意事項和細節
1)迪米特法則的核心是降低類之間的耦合
2)但是注意:由於每個類都減少了不必要的依賴,因此迪米特法則只是要求降低類間(對象間)耦合關系, 並不是要求完全沒有依賴關系
9.總結
用抽象構建框架,用實現擴展細節:
單一職責原則告訴我們實現類要職責單一;
接口隔離原則告訴我們設計接口要精簡單一;
依賴倒置原則告訴我們要面向接口編程;
里氏替換原則告訴我們不要破壞繼承體系;
迪米特法則告訴我們要降低對象間耦合關系;
而開閉原則是總綱,告訴我們要對擴展(提供者)開放,對修改(使用者)關閉。
