設計模式(design pattern)是對軟體設計中普遍存在問題的解決方案。這些解決方案是眾多軟體開發人員經過相當長的一段時間的試驗和錯誤總結出來的。
本人參考《head first 設計模式》一書進行學習。
提高思維、程式設計和設計能力;
使程式設計更標準化、**編制更工程化,提高開發效率,縮短開發周期;
使**具有更好的:重用性、可讀性、可擴充套件性(可維護性)、可靠性、高內聚低耦合;
使用層次
變化實現
oop原則
factory method
**級物件例項化
物件的例項化推遲到子類
開閉、黎克特制替換、依賴倒置
abstract factory
應用級產品家族的擴充套件
封裝產品族的建立
開閉、依賴倒置
singleton
**級、應用級
唯一例項
封裝物件產生的個數
facade
應用級、構架級
子系統的高層介面
封裝子系統
開閉template method
**級算法子步驟的變化
封裝演算法結構
依賴倒置
composite
**級複雜物件介面的統一
統一複雜物件的介面
黎克特制代換
proxy
應用級、構架級
物件訪問的變化
封裝物件的訪問過程
黎克特制代換
command
應用級請求的變化
封裝行為對物件
開閉observer
應用級、構架級
通訊物件的變化
封裝物件通知
開閉strategy
應用級演算法的變化
封裝演算法
黎克特制代換
builder
**級物件組建的變化
封裝物件的組建過程
開閉adapter
**級物件介面的變化
介面的轉換
bridge
**級物件的多維度變化
分離介面以及實現
開閉decorator
**級物件的組合職責
在穩定介面上擴充套件
開閉iterator
**級、應用級
物件內部集合的變化
封裝物件內部集合的使用
單一職責
mediator
應用級、構架級
物件互動的變化
封裝物件間的互動
開閉memento
**級狀態的輔助儲存
封裝物件狀態的變化
介面隔離
state
應用級物件狀態的變化
封裝與狀態相關的行為
單一職責
visitor
應用級物件操作變化
封裝物件操作變化
開閉prototype
應用級例項化的類
封裝對原型的拷貝
依賴倒置
flyweight
**級、應用級
系統開銷的優化
封裝物件的獲取
chain of resp.
應用級、構架級
物件的請求過程
封裝物件的責任範圍
interpreter
應用級領域問題的變化
封裝特定領域的變化
在學習設計原則和設計模式之前,需要先了解 uml:類圖及類的關係
。
設計原則單一職責原則(singel responsibility)
介面隔離原則(inte***ce segregation)
合成復用原則(composite reuse)
裡式替換原則(liskov substitution)
依賴倒置原則(dependence inversion)
迪公尺特法則(demeter)
開閉原則(open close)
優先使用聚合 / 組合關係,其次考慮繼承關係。引用父類的地方,必須能透明地使用其子類的物件。即繼承必須確保父類的性質在子類中成立;
子類盡量不要重寫父類方法,否則會降低繼承體系的復用性,特別是對於多型的使用;
繼承會提高耦合性,通用做法:改用依賴/聚合/組合等關係來替換繼承關係;
依賴抽象,不依賴具體類。
中心思想:針對介面程式設計,不針對實現程式設計;
變數的宣告型別是抽象類或介面(在變數引用和實際物件之間「加一層」)
注意
解決:3 種依賴注入方式構造器注入:宣告變數時,向構造方法傳遞引數;
setter注入:宣告變數後,通過 setter設定引數;
呼叫時注入:呼叫方法時,向方法傳遞引數;
例項
// 待注入介面
inte***ce tv
// 1、構造器注入
inte***ce myswitch
}// 2、setter注入
inte***ce myswitch
// 3、呼叫時注入
inte***ce myswitch
}
迪公尺特法則(又稱「最少知道原則」),即乙個類對自己依賴的類知道的越少越好;
被依賴的類:**邏輯都封裝在類內部,對外只提供 public方法。
更簡單的定義:只與直接朋友交流;
開閉原則 (ocp):程式設計中最基礎、最重要的設計模式對擴充套件開放,對修改關閉
用抽象構建框架,用實現擴充套件實現;
當需要變化時,通過擴充套件軟體實體的行為,而不是通過修改已有**;
所有設計原則和設計模式,目的就是遵循開閉原則;
OOP七大原則
單一職責原則 控制類的粒度大小,將物件解耦,提高內聚性 乙個物件應該只包含單一的職責,並且該職責被完整地封裝到乙個類裡 開閉原則 對擴充套件開放,對修改關閉 即實現在不修改源 的情況下改變這個模組的行為 核心 對系統進行抽象化,並從抽象化匯出具體化 黎克特制替換原則 繼承必須確保超類所擁有的性質在子...
OOP(物件導向程式設計)七大原則
對拓展開放,對修改關閉。也就是在原有的功能上進行拓展,盡量不要修改原有的功能。2.黎克特制替換原則 繼承要確保父類中的性質在子類中仍然使用。要面向介面程式設計,不要面向實現程式設計。抽象不依賴細節,細節不依賴抽象。控制類的粒度大小,將物件解耦 提高內聚性。也就是乙個方法盡可能完成一件事。5.介面隔離...
OSI網路的七大模型簡介
先宣告本文摘自是一片非常易懂的文章,以下做了壓縮的摘要!物理層 它的主要作用是傳輸位元流 就是由1 0轉化為電流強弱來進行傳輸,到達目的地後在轉化為1 0,也就是我們常說的數模轉換與模數轉換 這一層的資料叫做位元。資料鏈路層 為網路層提供服務,其最基本的服務是將源自網路層來的資料可靠地傳輸到相鄰節點...