面向對象設計六大原則


一: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.總結

用抽象構建框架,用實現擴展細節:
    單一職責原則告訴我們實現類要職責單一;
    接口隔離原則告訴我們設計接口要精簡單一;
    依賴倒置原則告訴我們要面向接口編程;
    里氏替換原則告訴我們不要破壞繼承體系;
    迪米特法則告訴我們要降低對象間耦合關系;
    而開閉原則是總綱,告訴我們要對擴展(提供者)開放,對修改(使用者)關閉。

參考鏈接:https://www.cnblogs.com/pony1223/p/7594803.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM