接着上一個話題:聊聊設計模式,什麼是設計模式?你知道多少?,咱們今天來聊一聊設計模式的六大設計原則。
html
一、單一職責原則(Single Responsibility Principle - SRP)
定義:不要存在多於一個致使類變動的緣由。通俗的說,即一個類只負責一項職責,只有一個引發它變化的緣由。
問題由來:類T負責兩個不一樣的職責:職責P1,職責P2。當因爲職責P1需求發生改變而須要修改類T時,有可能會致使本來運行正常的職責P2功能發生故障。
解決方案:遵循單一職責原則。分別創建兩個類T一、T2,使T1完成職責P1功能,T2完成職責P2功能。這樣,當修改類T1時,不會使職責P2發生故障風險;同理,當修改T2時,也不會使職責P1發生故障風險。設計模式
二、開放封閉原則(Open Closed Principle - OCP)
定義:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。
問題由來:在軟件的生命週期內,由於變化、升級和維護等緣由須要對軟件原有代碼進行修改時,可能會給舊代碼中引入錯誤,也可能會使咱們不得不對整個功能進行重構,而且須要原有代碼通過從新測試。
解決方案:當軟件須要變化時,儘可能經過擴展軟件實體的行爲來實現變化,而不是經過修改已有的代碼來實現變化。函數
三、里氏替換原則(Liskov Substitution Principle - LSP)
這項原則最先是在1988年,由麻省理工學院的一位姓裏的女士(Barbara Liskov)提出來的。
定義1:若是對每個類型爲 T1的對象 o1,都有類型爲 T2 的對象o2,使得以 T1定義的全部程序 P 在全部的對象 o1 都代換成 o2 時,程序 P 的行爲沒有發生變化,那麼類型 T2 是類型 T1 的子類型。
定義2:全部引用基類的地方必須能透明地使用其子類的對象。
問題由來:有一功能P1,由類A完成。現須要將功能P1進行擴展,擴展後的功能爲P,其中P由原有功能P1與新功能P2組成。新功能P由類A的子類B來完成,則子類B在完成新功能P2的同時,有可能會致使原有功能P1發生故障。
解決方案:當使用繼承時,遵循里氏替換原則。類B繼承類A時,除添加新的方法完成新增功能P2外,儘可能不要重寫父類A的方法,也儘可能不要重載父類A的方法。測試
四、迪米特法則(最少知道原則)(Demeter Principle)(Least Knowledge Principle - LKP)
最少知識原則又叫迪米特法則,最先是在1987年由美國Northeastern University的Ian Holland提出。阿里雲
我有幾張阿里雲幸運券分享給你,用券購買或者升級阿里雲相應產品會有特惠驚喜哦!把想要買的產品的幸運券都領走吧!快下手,立刻就要搶光了。
核心思想是:低耦合、高內聚
一個實體應當儘可能少的與其餘實體之間發生相互做用,使得系統功能模塊相對獨立。也就是說一個軟件實體應當儘量少的與其餘實體發生相互做用。這樣,當一個模塊修改時,就會盡可能少的影響其餘的模塊,擴展會相對容易,這是對軟件實體之間通訊的限制,它要求限制軟件實體之間通訊的寬度和深度。設計
五、接口隔離原則(Interface Segregation Principle - ISP)
每一個接口中不存在子類用不到卻必須實現的方法,若是否則,就要將接口拆分。使用多個隔離的接口,比使用單個接口(多個接口方法集合到一個的接口)要好。
定義:客戶端不該該依賴它不須要的接口;一個類對另外一個類的依賴應該創建在最小的接口上。htm