一、設計模式目的
爲了讓我們設計的軟件或者代碼 在 高內聚低耦合、便於維護、擴展性強、代碼重用性高 等方面變的更好
二、設計模式六大原則
單一職責原則 、接口隔離原則、依賴反轉原則、里氏替換原則、開閉原則 【ocp原則】、迪米特法則、合成複用原則
-
概述:一個類負責一項職責,設計多個方法時,一個方法負責一個功能單一職責
好處:降低類的複雜度 ,提高類的可讀性,可維護性 -
概述:根據不同的用途,應該創建不同的接口,實現類只需要依賴自己需要實現的接口,不應該依賴不需要的接口接口隔離
-
依賴反轉
1、核心思想就是面向抽象【接口和抽象類】編程,因爲抽象比細節穩定的多,以抽象爲基礎搭建的架構更加穩定
2、高層模塊不應該依賴低層的模塊
3、抽象不依賴細節,細節依賴抽象
4、使用接口或者抽象類制定好規範,而不涉及任何具體的操作,方便後期維護
5、變量的聲明儘量是接口或者抽象類,有利於程序的擴展和優化
-
提出背景:里氏替換
面向對象中關於繼承的使用思考
1)繼承包含這樣一層含義:父類中凡是已經實現好的方法,實際上是在設定規範和契約,雖然它不強制要求所有的子類必須遵循這些契約,但是如果子類對這些已經實現的方法任意修改,就會對整個繼承體系造成破壞。
2)繼承在給程序設計帶來便利的同時,也帶來了弊端。比如使用繼承會給程序帶來侵入性,程序的可移植性降低,增加對象間的耦合性,如果一個類被其他的類所繼承,則當這個類需要修改時,必須考慮到所有的子類,並且父類修改後,所有涉及到子類的功能都有可能產生故障
里氏替換原則:
我們定義的方法中,使用了父類作爲參數,當我們實際傳遞的參數是其具體的子類時,這個方法的功能沒有發生變化【也就是說:所有引用父類的地方,必須能使用子類的對象】,
總結:適當情況下,我們可以通過聚合、組合、依賴來替換繼承
-
開閉原則
編程中最基礎、最重要的設計原則:一個軟件實體如類、模塊、函數 ,應該對擴展開放(對開發者自己),對修改關閉(對使用方,不可修改)
當需求發生變化時,儘量通過添加實現類的方法,而不是通過修改已有代碼 -
迪米特法則:
1)一個對象應該對其他對象保持最少的瞭解
2)類與類關係越密切,耦合度越大
3)迪米特法則(Demeter Principle)又叫最少知道原則,即一個類對自己依賴的類知道的越少越好。也就是說,對於被依賴的類不管多麼複雜,都儘量將邏輯封裝在類的內部。對外除了提供的 public 方法,不對外泄露任何信息
4)迪米特法則還有個更簡單的定義:只與直接的朋友通信
5)直接的朋友:每個對象都會與其他對象有耦合關係,只要兩個對象之間有耦合關係,我們就說這兩個對象之間是朋友關係。耦合的方式很多,依賴,關聯,組合,聚合等。其中,我們稱出現成員變量,方法參數,方法返回值中的類爲直接的朋友,而出現在局部變量中的類不是直接的朋友。也就是說,陌生的類最好不要以局部變量的形式出現在類的內部。