好久之前看設計模式的時候,也沒有看的太透徹,一直到如今,仍是雲裏霧裏,並且雜七雜八的知識早就忘得差很少了。設計模式
最近買了一本最經典的最基礎的設計模式的書--《大話設計模式》,就此趁這機會在重學一遍,好好理一理思路。mvc
字面理解,是要保持功能的單一,每一個類或方法要儘可能把實現的功能拆分出來,這樣能保證低耦合,還能減小代碼的重複量。函數
好比,從學生表中獲取成績大於90的學生,修改等級爲A,若是放在一個方法裏實現,那獲取成績大於90分的學生的功能就要從新寫一個方法。.net
最好的辦法是,將查詢和修改寫成兩個方法,避免重用。這在mvc三層設計裏就是常用的。設計
任何基類能夠出現的地方,子類必定能夠出現。對象
-->1)子類必須徹底實現父類的方法blog
-->2)子類能夠有本身獨有的方法和屬性接口
-->3)覆蓋或實現父類的方法時輸入參數能夠被放大開發
-->4)覆蓋或實現父類的方法時輸出結果能夠被縮小get
抽象不該該依賴細節,細節應該依賴於抽象。高層模塊不該該依賴於低層模塊,二者都應該依賴於抽象。
若是是高層依賴於低層,在低層模塊須要更改時也須要更改高層模塊,會致使模塊的複用性下降並且大大提升了開發的成本。因此用依賴倒轉,即便實現細節不斷變更,只要抽象不變,客戶程序就不須要變化。這大大下降了客戶程序與實現細節的耦合度。
客戶端不該該依賴它不須要的接口;一個類對另外一個類的依賴應該創建在最小的接口上。
通常規則:
好比在簡書上看到的一個例子:一個動物接口,一隻狗,一隻雞,若是接口裏定義了飛的方法,狗對象並不能使用。因此要再定義一個接口,將飛的方法放進去,由雞來實現。
一個軟件實體應當儘量少的與其餘實體發生相互做用。就是說一個對象應當對其餘對象有儘量少的瞭解,不和陌生人說話。
軟件實體,包括類、函數、模塊等,能夠擴展,但不能修改。簡單來講就是能夠添加,不能改動。開閉原則中「開」,是指對於組件功能的擴展是開放的,是容許對其進行功能擴展的;開閉原則中「閉」,是指對於原有代碼的修改是封閉的,即修改原有的代碼對外部的使用是透明的。