溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

設(shè)計(jì)模式--Command, Template Method, Strategy

發(fā)布時(shí)間:2020-07-02 08:50:08 來(lái)源:網(wǎng)絡(luò) 閱讀:440 作者:zmhot88 欄目:軟件技術(shù)

 Command--對(duì)象行為型模式

 
意圖
將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶(hù)進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,以及支持可撤銷(xiāo)的操作。
 
別名
Action,Transaction
 
適用性
  1. 抽象出待執(zhí)行的動(dòng)作以參數(shù)化某對(duì)象
  2. 在不同的時(shí)刻指定、排列和執(zhí)行請(qǐng)求。
  3. 支持取消操作。
  4. 支持修改日志。
  5. 用構(gòu)建在原語(yǔ)操作上的高層操作構(gòu)造一個(gè)系統(tǒng)。
 
結(jié)構(gòu)
 

設(shè)計(jì)模式--Command, Template Method, Strategy

 

設(shè)計(jì)模式--Command, Template Method, Strategy

 
效果
  1. Command模式將調(diào)用操作的對(duì)象和知道如何實(shí)現(xiàn)該操作的對(duì)象解藕。
  2. Command是頭等的對(duì)象。它們可以像其他的對(duì)象一樣被操縱和擴(kuò)展。
  3. 你可將多個(gè)命令裝配成一個(gè)符合命令
  4. 增加新的Command很容易,因?yàn)檫@無(wú)需改變已有的類(lèi)。
 
實(shí)現(xiàn)問(wèn)題
  1. 一個(gè)命令對(duì)象應(yīng)達(dá)到何種只能程度
  2. 支持取消(undo)和重做(redo)
  3. 避免取消操作過(guò)程中的錯(cuò)誤積累
  4. 使用C++模板

 

Template method----類(lèi)行為模式

意圖
定義一個(gè)操作的算法的骨架,而將一個(gè)步驟延遲到子類(lèi)中。
 
適用性
  1. 一次性實(shí)現(xiàn)一個(gè)算法的部分,并將可變的行為留給子類(lèi)來(lái)實(shí)現(xiàn)。
  2. 各子類(lèi)中的公共的行為應(yīng)被提取出來(lái)并集中到一個(gè)公共父類(lèi)中以避免代碼重復(fù)。
  3. 控制子類(lèi)擴(kuò)展。
 
結(jié)構(gòu)
 

設(shè)計(jì)模式--Command, Template Method, Strategy

 
效果
模板方法導(dǎo)致一種反向控制,這種結(jié)構(gòu)有時(shí)被稱(chēng)為“好萊塢法則”,即“別找我們,我們找你”。
 
實(shí)現(xiàn)
有三個(gè)問(wèn)題值得注意:
  1. 使用C++訪問(wèn)控制,一個(gè)模板方法調(diào)用的原語(yǔ)操作可以被定義為保護(hù)成員。
  2. 盡量減少原語(yǔ)操作
  3. 命名約定
 
這種模式我們基本每天都在用,android開(kāi)發(fā)中Activity的onCreate,onResume, View中的draw等等。
 
Strategy--對(duì)象行為型模式
意圖
定義一系列的算法,把它們一個(gè)個(gè)封裝起來(lái),并且使它們可以相互替換。本模式使得算法可以獨(dú)立于使用它的客戶(hù)而變化。
 
別名
Policy
 
適用性
  1. 許多相關(guān)的類(lèi)僅僅是行為有異。“策略”提供了一種用多個(gè)行為中的一個(gè)行為來(lái)配置一個(gè)類(lèi)的方法
  2. 需要使用一個(gè)算法的不同變體。
  3. 算法使用客戶(hù)不應(yīng)該知道的數(shù)據(jù)??墒褂貌呗阅J揭员苊獗┞稄?fù)雜的、與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu)。
  4. 一個(gè)類(lèi)定義了多種行為,并且這些行為在這個(gè)類(lèi)的操作中以多個(gè)條件語(yǔ)句的形勢(shì)出現(xiàn)。將相關(guān)的條件分支移入它們各自的Strategy類(lèi)中以代替這些條件語(yǔ)句
 
結(jié)構(gòu)
 

設(shè)計(jì)模式--Command, Template Method, Strategy

 
協(xié)作
  1. Strategy和Context相互作用以實(shí)現(xiàn)選定的算法。當(dāng)算法被調(diào)用時(shí),Context可以將算法所需要的所有數(shù)據(jù)都傳遞給該Strategy?;蛘?,Context可以將自身作為一個(gè)參數(shù)傳遞給Strategy操作。這就讓Strategy在需要時(shí)可以回調(diào)Context。
  2. Context將它的客戶(hù)的請(qǐng)求轉(zhuǎn)發(fā)給它的Strategy。客戶(hù)通常創(chuàng)建并傳遞一個(gè)ConcreteStrategy對(duì)象給該Context;這樣,客戶(hù)僅與Context交互。通常有一系列的ConcreteStrategy類(lèi)可供客戶(hù)選擇。
 
效果(優(yōu)缺點(diǎn))
  1. 相關(guān)算法系列
  2. 一個(gè)替代繼承的方法
  3. 消除一些條件語(yǔ)句
  4. 實(shí)現(xiàn)的選擇
  5. 客戶(hù)必須了解不同的Strategy
  6. Strategy和Context之間的通信開(kāi)銷(xiāo)
  7. 增加了對(duì)象數(shù)目
 
實(shí)現(xiàn)問(wèn)題
  1. 定義Strategy和Context接口
  2. 將Strategy作為模板參數(shù)
  3. 使Strategy對(duì)象成為可選的

 

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI