同一件事 >< 不同事情:策略模式是通過不同的演算法做同一件事情:例如排序命令模式則是通過不同的命令做不同的事情,常含有(關聯)接收者。
是否含有接收者:命令模式含有,策略模式不含有。命令模式中的命令可以單獨執行。命令模式等於選單中的複製,移動,壓縮等,而策略模式是其中乙個選單的例如複製到不同演算法實現。命令模式:將多個命令只提交給乙個執行該命令的物件
職責鏈模式:只將乙個請求提交給多個能執行該命令的物件策略模式 把易於變化的行為分別封裝起來,讓它們之間可以互相替換, 讓這些行為的變化獨立於擁有這些行為的客戶。
gof《設計模式》中說道:定義一系列演算法,把它們乙個個封裝起來,並且使它們可以相互替換。該模式使得演算法可獨立於它們的客戶變化。
command命令模式是一種物件行為型模式,它主要解決的問題是:在軟體構建過程中,「行為請求者」與「行為實現者」通常呈現一種「緊耦合」的問題。
gof《設計模式》中說道:將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可撤銷的操作。
從這點看:
策略模式是通過不同的演算法做同一件事情:例如排序
而命令模式則是通過不同的命令做不同的事情,常含有(關聯)接收者。
目標不同!
命令模式是含有不同的命令(含有接收者的請求):做不同的事情;隱藏接收者執行細節。常見選單事件,
而策略模式含有不同的演算法,做相同的事情;
區別在於是否含有接收者。命令模式含有,策略模式不含有。命令模式中的命令可以單獨執行。
打個比喻就是:
命令模式等於選單中的複製,移動,壓縮等,而策略模式是其中乙個選單的例如複製到不同演算法實現。
命令模式,就是傳遞、排程請求的乙個過程;
策略模式,是選擇哪乙個演算法執行的過程;
兩者的本質思想是有很大區別的,雖然都是行為模式。
**或參考:命令模式、狀態模式、責任鏈模式區別**)
命令模式:一次設定,統一執行。
狀態模式:
相當於if else if else;
設計路線:各個state類的內部實現(相當於if,else if內的條件)
執行時通過state呼叫context方法來執行。
職責鏈模式:
相當於swich case
設計路線:客戶設定,每個子類(case)的引數是下乙個子類(case)。
使用時,向鏈的第乙個子類的執行方法傳遞引數就可以。
命令模式:將多個命令只提交給乙個執行該命令的物件
而職責鏈模式相反:只將乙個請求提交給多個能執行該命令的物件
狀態模式與職責鏈模式的區別:
狀態模式是讓各個狀態物件自己知道其下乙個處理的物件是誰,即在編譯時便設定好了的;
而職責鏈模式中的各個物件並不指定其下乙個處理的物件到底是誰,只有在客戶端才設定。
職責鏈模式
鏈的組織是從最特殊的到最一般的,並且不能保證請求在任何情況下都回有相應。
職責鏈將程式中每個物件能做什麼的內容隔離,即職責鏈減少了物件之間的耦合,每個物件都能獨立操作。職責鏈也可用於構成主程式的物件和包含其它物件例項的物件。
適用場景:
1 具有相同方法的幾個物件都適合於執行程式請求操作,但由物件決定由誰去完成操作,比把決策建立在呼叫**中更合適
2 其中某個物件可能最適合處理請求,但你不想通過一些列if-else語句或switch語句去選擇乙個特定的物件
3 程式執行時,需要向處理選項鍊中新增新的物件
4 在多個物件都能執行乙個請求的情況下,你不想把這些相互作用的內容放在呼叫程式裡
鏈中每個物件都是「自治」的,最後乙個物件決定是預設處理請求,還是拋棄
命令模式
職責鏈沿類鏈**請求,而命令模式只將請求**給乙個特定物件。命令模式把乙個申請特定操作的請求封裝到乙個物件中,並給該物件乙個眾所周知的公共介面,使客戶端不用了解實際執行的操作就能產生請求,也可以使你改變操作而絲毫不影響客戶端程式。
命令模式的效果:
命令模式的主要缺點是,增加了使程式散亂的小類,不過,即使有單獨的單擊事件,也通常都呼叫小的私有方法完成具體功能。最後的結果是,私有方法和我們這些小類的**長度幾乎一樣,因此,構建 command類和編寫較多的方法在複雜性上通常沒有區別,主要區別是命令模式生成的小類更容易理解。
使用命令設計模式的另乙個主要原因是,他們提供了乙個便捷的儲存方法並能完成undo功能。每個命令物件都記住剛剛做過的事,並在有undo請求時,只要計算量和記憶體需求不太過分,就能恢復到剛才的狀態
北風設計模式課程 17 橋接模式
設計模式都是對生活的抽象,比如使用者獲得裝備,我可以先裝備工廠先生產出來裝備,然後給宗門 庫,宗門 庫發給我,如果是打怪獲得的裝備,可以是裝備工廠把裝備給的怪物裝備庫多維 車型 汽車 卡車 轎車等 和發動機 2000cc,2200cc等 之間形成多維建立型 抽象工廠模式 構造型 橋接模式car和en...
北風設計模式課程 18 介面卡模式
設計模式都是對生活的抽象,比如使用者獲得裝備,我可以先裝備工廠先生產出來裝備,然後給宗門 庫,宗門 庫發給我,如果是打怪獲得的裝備,可以是裝備工廠把裝備給的怪物裝備庫通過adapter模式可以改變已有類 或外部類 的介面形式 adapter模式也叫介面卡模式,是構造型模式之一,通過adapter模式...
北風設計模式課程 35 迪公尺特法則
乙個物件應當對其他物件盡可能少的了解依賴抽象,不依賴具體 比如和陌生人的抽象有依賴,但是沒和具體的陌生人有依賴。1 通過第三方 通過朋友類 2 依賴倒置原則 通過抽象 通過陌生人的抽象類乙個物件應當對其他物件盡可能少的了解 迪公尺特法則 law of demeter 又叫做最少知識 原則,也就是說,...