java的10大設計原則
追求高內聚highly cohesive 和松耦合 loosely couple 的解決方案是面向對象設計基本核心原則。這里列出OO設計中十大原則。
1. DRY (不要重復你自己)
這是指不寫重復的代碼,取而代之是使用抽象共性的東西。如果超過一次使用硬編碼,那么就要考慮將其公開為final修飾的不變量;如果你在兩個以上地方有相同的代碼塊,那么就要考慮使其成為一個單獨的方法。SOLID設計原理的好處是在維護。值得注意的是重復的不是指代碼,而是對于功能而言的。
2.封裝變化
在軟件領域唯一不變的就是“變”,所以封裝那些你估計在未來可能被改變的代碼。這種設計的好處是容易測試和易于維護。如果你是進行Java編碼,那么就要使變量和方法變成私有。有幾個Java設計模式采用封裝,工廠設計模式封裝的是對象創建代碼,并提供了在不改變現有的代碼情況下推出新產品的靈活性。
3.開閉原則
類,方法或函數應該對擴展開放(新功能)和對修改關閉。這又是一個漂亮的面向對象的設計原則,防止對已經測試過的代碼嘗試修改。
4.單一職責
不應該有超過一個理由去修改類,因為一個類只能有一個職責功能,如果你將多于一個功能增加到一個類中,相當于在兩個功能之間引入了緊耦合。
5.依賴注入或反轉控制
不要主動要求依賴,因為它已經由框架提供給你。比如Spring框架等,這樣的設計原則妙處在于,它是由DI注入框架的注入匹配需要的類,這樣更容易進行測試維護,因為創建對象的代碼都集中在框架,而客戶端代碼是不參與的。
6. 組合勝過于繼承
如果可能的話組合composition總是勝過繼承。組合比繼承擁有更多的靈活性。組合允許在運行時設置屬性,并通過使用接口來實現,我們可以使用多態在類運行時改變類的行為,從而提供更好的接口實現。
7. LSP原則
根據里氏替換原則,子類型必須是可替代超類型,即方法或函數,它使用超類的類型必須能夠與子類的對象時一樣沒有任何問題,如果一個類比子類有更多的功能,而子類可能不支持某些功能,這沒有違反LSP。為了遵循LSP的設計原理,派生類或子類必須是增強功能不是減少它。
8.接口分離原則ISP
接口隔離原則要求:客戶端不應該實現它不使用的接口,。當一個接口包含一個以上的功能而客戶端只需要一個功能時容易出現這種情況,因為一旦你釋放你的接口,你就不能改變它。
9. 面向接口而不是實現編程
面向接口編程而不是面向實現子類,這有靈活性的好處,特別是同樣接口有不同實現子類時。
10.委托原則
不要自己做所有的事情,可以委托給相應的類去完成。