面向對象設計原則是OOPS(Object-Oriented Programming System,面向對象的程序設計系統)編程的核心,但大多數Java程序設計人員不重視面向對象的分析和設計。甚至還有經驗豐富的Java程序員沒有據說過OOPS和SOLID設計原則,他們根本不知道設計原則的好處,也不知道如何依照這些原則來進行編程。接下來有博洋教育幫助你們補充這方面的知識點。程序員
衆所周知,Java編程最基本的原則就是要追求高內聚和低耦合的解決方案和代碼模塊設計。查看Apache和Sun的開放源代碼能幫助你發現其餘Java設計原則在這些代碼中的實際運用。Java Development Kit則遵循如下模式:BorderFactory類中的工廠模式、Runtime類中的單件模式。編程
雖然實際案例是學習設計原則或模式的最佳途徑,但經過博洋教育的介紹,沒有接觸過這些原則或還在學習階段的Java程序員也可以瞭解這10個面向對象的設計原則。設計模式
1:封裝變化框架
在軟件領域中惟一不變的就是「Change」,所以封裝你認爲或猜想將來將發生變化的代碼。OOPS設計模式的優勢在於易於測試和維護封裝的代碼。若是你使用Java編碼,能夠默認私有化變量和方法,並逐步增長訪問權限,好比從private到protected和not public。有幾種Java設計模式也使用封裝,好比Factory設計模式是封裝「對象建立」,其靈活性使得以後引進新代碼不會對現有的代碼形成影響。函數
2:DRY(Don't repeat yourself)原則學習
即不要寫重複的代碼,而是用「abstraction」類來抽象公有的東西。若是你須要屢次用到一個硬編碼值,那麼能夠設爲公共常量;假設你要在兩個以上的地方使用一個代碼塊,那麼能夠將它設爲一個獨立的方法。設計的原則就是要易於維護,使用公共代碼來實現兩個不一樣的功能,其實就是近似地把這兩個功能永遠捆綁到了一塊兒。測試
3:單一職責原則編碼
類被修改的概率是很是大的,所以應該注重於設計單一的功能類進行封裝。若是你把多個功能放在同一個類中,功能之間就造成了關聯,改變其中一個功能,有可能停止另外一個功能,這時就須要新一輪的測試來避免可能出現的問題。spa
4:依賴注入或倒置原則開放源代碼
這個設計原則的亮點在於任何被DI框架注入的類很容易用mock對象進行測試和維護,由於對象建立代碼集中在框架中,客戶端代碼也不混亂。有不少方式能夠實現依賴倒置,好比像AspectJ等的AOP(Aspect Oriented programming)框架使用的字節碼技術,或Spring框架使用的代理等。
5:開閉原則
即對擴展開放,對修改關閉。這是另外一種很是棒的設計原則,能夠防止其餘人更改已經測試好的代碼。使用這項原則上能夠在不修改原有的模塊的基礎上,擴展功能。這也是開閉原則的宗旨。
6:接口分離原則
設計採用多個與特定客戶類有關的接口比採用一個通用的涵蓋多個業務方法的接口要好。設計接口很棘手,由於一旦釋放接口,你就沒法在不中斷執行的狀況下改變它。在Java中,該原則的另外一個優點在於,在任何類使用接口以前,接口不利於實現全部的方法,因此單一的功能意味着更少的實現方法。
7:針對接口編程,而不是針對實現編程
該原則是程序設計過程當中的一個要點,可使代碼更加靈活,以即可以在任何接口實現中使用。所以,在Java中最好使用變量接口類型、方法返回類型、方法參數類型等。
8:優先利用組合而非繼承
在開發過程當中應該儘量優先利用組合而不是繼承。一些人可能會質疑,但觀察發現,組合比繼承靈活得多。組合容許在運行期間經過設置類的屬性來改變類的行爲,也能夠經過使用接口來組合一個類,它提供了更高的靈活性,並能夠隨時實現。
9:里氏代換原則(LSP)
根據該設計原則,子類必須可以替換掉它們的基類,也就是說使用基類的方法或函數必須可以順利地引用子類對象。爲了遵循該設計原則,派生類或子類必須加強功能。LSP原則與單一職責原則和接口分離原則密切相關,若是一個類比子類具有更多功能,頗有可能某些功能會失效,這就違反了LSP原則。
10:委託原則
該原則最典型的例子是Java中的equals() 和hashCode() 方法。爲了平等地比較兩個對象,咱們用類自己而不是客戶端類來作比較。這個設計原則的好處是沒有重複的代碼,並且很容易對其進行修改。
博洋教育但願經過這一系列對面向對象的設計原則的介紹能幫助你寫出更靈活更好的代碼。理論聯繫實際,更重要的是須要Java人員在實踐中去運用和體會。