單一職責原則、介面隔離原則、開閉原則、依賴倒換原則、黎克特制代換原則、最少知道原則(迪公尺特法則)
乙個類只負責乙個職責,盡量降低耦合。(具體乙個職責有是什麼呢,怎麼劃分就自己視情況而定了)
好處:使程式更有條理;降低維護難度,當修改此類方法時不影響其他類的使用
建立單一介面,讓介面盡量細化,避免實現類實現不必要的介面。(這個很好理解,如果乙個介面有10個方法,而實現類只是想呼叫其中的乙個方法而已,那麼顯然沒必要實現其它九個介面啊,自然需要介面的細化隔離)
對於擴充套件是開放的,對於修改是封閉的。
實現方法:如增加乙個功能時,不要在原有的**模組中進行修改,而是在原有的基礎上附加新的模組以實現相應的功能,這樣就不用對原有的功能進行測試,即使出現錯誤也是新建模組的錯誤,便於修改。
要依賴於抽象,不要依賴於具體;即類之間產生依賴時,盡量避免直接依賴於實體類,而是依賴於乙個抽象
實現方法:實現類a實現功能(x)時應該依賴於介面b,然後將介面b的實現類
(c)當做引數實現傳入實現相應的功能(x),而不是直接繼承具體的實現類(c)。
舉個例子:手機(a)要實現充電(x)的功能,實現類(c)是使用type-c充電器,貌似沒有什麼問題。但如果手機(a)有一天型號變啦,變成蘋果手機了,實現類(c)就不能充電了,因此需要實現類(d)完成蘋果充電的功能,但是原有的type-c功能不能沒了啊,所以還是依賴於介面吧
即發生在繼承的子類和父類,當一段程式使用了父類實現相應的功能時,則在這個地方使用其子類也應當能夠實現相同的功能(繼承之後重寫方法的多型雖然讓**更加的靈活,但是乙個方法展現出不同的功能時,確實容易讓人混淆)
實現方法:當類繼承時,不要去重寫父類的方法
應該盡量避免間接物件之間的互動,即方法的細節應該盡量封裝在內部,只提供給外部乙個呼叫即可
實現方法:a直接呼叫了b,b直接呼叫了c;需要實現以c為基礎的功能時,應避免c以區域性變數的方式在a**現並執行相應的邏輯操作,而應該是在b中封裝好a想要呼叫的基於c的功能。
舉個例子:小谷(a)想訂外賣,直接呼叫了美團(b),外賣又需要外賣員(c)送,那麼需要小谷(a)和外賣員(c)直接溝通嗎,顯然是不需要的,美團(b)封裝了乙個方法,小谷(a)只需要呼叫這個方法傳入具體的訂餐資訊就可以實現送餐功能了,而不需要具體關注外賣員走哪條路,騎什麼車來送餐的細節,小谷(a)只要最終收到外賣就可以啦
想要看具體例項的:
總結的超級詳細,膜拜ing
六大設計原則
1.單一職責原則 單一職責原則 single responsibility principle,srp 有且僅有乙個原因引起類的變更,乙個介面或類只有乙個職責。2.黎克特制替換原則 黎克特制替換原則 liskov substitution principle,lsp 所有引用基類的地方必須能透明地使...
六大設計原則
六大設計原則,按照英文首字母概括為sollid,可簡單理解為 solid 穩定的。這六大設計原則如下 single responsibility principle 單一職責原則 open closed principle 開閉原則 liskov substitution principle 黎克特...
六大設計原則
開閉原則 對擴充套件開放對修改關閉 軟體在生命週期內會發生變化,開閉原則告訴我們應該通過拓展軟體實體行為來實現變化而不是修改已有 來完成變化 改變要盡量少 變化型別 邏輯變化 子模組變化 可見檢視變化 優點 1.已有 是通過了測試的,減少了測試成本 2.提高復用性 顆粒度越小,被復用的可能性就越大,...