java五大原则_Java成长第五集--面向对象设计的五大原则
S.O.L.I.D?是面向對象設計(OOD)和面向對象編程(OOP)中的幾個重要編碼原則(Programming Priciple)的首字母縮寫。以下圖說明:
下面就個人的理解來說說這五大原則的含義到底是什么?
一、單一職責:? 我們通常都說“低耦合,高內聚”。在我看來,這里的"單一職責"就是我們通常所說的“高內聚”,即一個類只完成它應該完成的職責,不能推諉責任,也不可越殂代皰,不能成為無所不能的上帝類。如果你的團隊中實施寬松的“代碼集體所有權”,在編碼的過程中出現許多人同時修改(維護)同一個類的現象,而且成員之間的溝通不夠及時,主動和暢通的話,那么時間一長,就很可能出現“承擔過多職責”的上帝類。這時,提煉基類/接口和提煉類重構將能幫助我們消除或減輕這種設計臭味。
二、開放封閉原則:從面向對象設計角度看,這個原則可以這么理解:"軟件實體(類,模塊,函數等等)應當對擴展開放,對修改閉合。"?通俗來講,它意味著你(或者類的客戶)應當能在不修改一個類的前提下擴展這個類的行為。在OOD里,對擴展開放意味著類或模塊的行為能夠改變,在需求變化時我們能以新的,不同的方式讓模塊改變,或者在新的應用中滿足需求。也就是說,對擴展是開放的,而對修改是封閉的。我們通常都說:向系統中增加功能時應該只是添加新代碼,而應該盡量少的修改原代碼。在我看來,這就是遵循開放封閉原則所能帶來的效果。
三、里氏替換原則(LSP):"子類型必須能夠替換它們的基類型。"或者換個說法:"使用基類引用的地方必須能使用繼承類的對象而不必知道它。"?這個原則正是保證繼承能夠被正確使用的前提。通常我們都說,“優先使用組合(委托)而不是繼承”或者說“只有在確定是 is-a 的關系時才能使用繼承”,因為繼承經常導致”緊耦合“的設計。在基本的面向對象原則里,"繼承"通常是"is a"的關系。如果"Developer" 是一個"SoftwareProfessional",那么"Developer"類應當繼承"SoftwareProfessional"類。在類設計中"Is a"關系非常重要,但它容易沖昏頭腦,導致使用錯誤的繼承造成錯誤設計。例如:鳥都有一種行為fly,翠鳥和鴕鳥都繼承自鳥,但是卻不能夠在使用鳥類的地方用鴕鳥來進行替換,因為鴕鳥不會飛,所以這就違背了里氏替換原則。
為什么LSP如此重要?
如果沒有LSP,類繼承就會混亂;如果子類作為一個參數傳遞給方法,將會出現未知行為;
如果沒有LSP,適用與基類的單元測試將不能成功用于測試子類;
四、接口分離原則(ISP):這個原則的意思是"客戶端不應該被迫依賴于它們不用的接口。"?也就是說,一個接口或者類應該擁有盡可能少的行為(那么,什么叫盡可能少?就是少到恰好能完成它自身的職責),這也是保證“軟件系統模塊的粒度盡可能少,以達到高度可重用的目的。接口包含太多的方法會降低其可用性,像這種包含了無用方法的"胖接口"會增加類之間的耦合。如果一個類想實現該接口,那么它需要實現所有的方法,盡管有些對它來說可能完全沒用,所以這樣做會在系統中引入不必要的復雜度,降低代碼的可維護性或魯棒性。接口分離原則確保實現的接口有它們共同的職責,它們是明確的,易理解的,可復用的。
五、依賴倒置原則(DIP):這個原則的意思是:高層模塊不應該依賴底層模塊,兩者都應該依賴其抽象。其實又是”面向接口編程,不要面向實現編程“的內在要求。
總結
以上是生活随笔為你收集整理的java五大原则_Java成长第五集--面向对象设计的五大原则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java8 lambda 接口_Java
- 下一篇: Java中测长函数_Core Java测