一、策略模式(可參看
)
應用場景:多種策略、演算法應用於同一用途(比如都是排序演算法),不同的情況需要用不同的策略(比如內部排序用快排,外部排序用歸併),由客戶端去決定具體呼叫哪乙個策略或演算法。
一般的實現形式:每種策略類實現同乙個介面,實現演算法。由乙個context類通過構造方法引入具體的策略物件,封裝演算法。客戶端在不同場景下使用context呼叫不同演算法去實現功能。(當具體策略類除了共同的規範還有各自的特色時,可以使用抽象類與子類的關係代替介面與實現類,實現策略模式)
特點:是一種組織策略、演算法的設計模式,可以動態的切換不同策略,但同一時刻只能使用一種策略。
優點:避免了多重條件if-else語句的使用,避免了選擇演算法的邏輯與的實現演算法的邏輯混為一談。
缺點:因為是客戶端自己的選擇行為,所以對客戶端控制水平要求較高。
二、工廠模式
我們為什麼要用工廠模式?
簡單地說,工廠模式就是提供了一種
對使用者類簡單的、
對工廠類安全的、
二者低耦合,符合開閉原則的物件建立的方式,將建立物件的工作從使用者(需求類)轉為了工廠主(工廠類)!
詳細地講,有很多產品類,如果不使用工廠模式,使用者類(需要產品物件的類)就必須知道產品物件的構建方式,使用者和產品生產耦合在一起;如果產品生產過程很複雜,使用者進行構造就很困難,而且只要產品的構造方式有變化,所有需要產品的使用者都需要去知道新的構造方式。有一給比喻很恰當,買車的人需要知道汽車是怎麼造的嗎?所以我們就迫切的需要乙個汽車工廠,使用者告訴工廠他需要啥啥型號的汽車,工廠就返回給使用者乙個汽車。(工廠的效果跟spring的ioc依賴注入機制是類似的)
工廠模式的型別?(可參看
)
簡單工廠模式,也叫作靜態工廠模式,它就是通過乙個靜態的工廠類,將物件的構造細節封裝在方法中,需求類直接呼叫即可,物件構造方法的改變也不會影響需求類。至於產品類可以進行抽象,比如噴氣飛機、客機、戰鬥機就可以抽象出乙個飛機類,每種具體類繼承飛機類。這樣做的好處也就就是抽象的好處嘛,復用、拓展、執行期繫結。當然,這個抽象類與子類的關係也可以用介面與實現類實現,所有的設計模式都沒那麼死板,都可以根據具體情況變通。
工廠方法模式,就是對工廠類進行與產品類一樣的抽象,每種工廠只生產一種產品,如戰鬥機工廠生產戰鬥機、客機工廠生產客機,這些工廠繼承抽象的飛機工廠類。由於抽象與靜態是不能共存的,所以在工廠方法模式裡構造產品物件的方法就不再是靜態。
抽象方法模式,大體上與工廠方法模式相同,區別是這種情況下產品簇包含一些匹配的產品時,如滑鼠和鍵盤是配套的,每種工廠就不只生產一種產品,轉而生產一套產品。
未完待續 設計模式學習總結
一 設計模式的分類 1.1 根據目的分類 1 建立型 關注物件的建立過程,描述如何將物件的建立和使用分離,讓呼叫者無需關心物件的建立細節,降低耦合的同時也更易於修改和擴充套件 2 結構型 用於處理類或物件的組合,將現有類或物件組織在一起形成更加強大的結構,3 行為型 用於描述類或物件怎樣互動和怎樣分...
PHP 設計模式 (未完待續)
一 oop介紹 真理形成的兩大要素 事實和抽象 不要把我們的寶貴的遺產視同兒戲,請珍視這個有序而自由的偉大國度,因為,如果我們蹣跚跌倒,如今的自由和文明將走向毀滅.每人都會得到遺傳給他的一切,他繼承豐富的遺產.二 1 抽象類 class onetrick product inte ce produc...
單例設計模式(未完待續)
一 應用場景 當我們想使用乙個類中的物件,該物件為唯一乙個。二 設計流程 1.私有化構造方法 private x 2.在類中建立乙個本類物件,並將其私有化 private static x x new x 3.用乙個公共靜態方法將其返回出 public static x getinstance 三 ...