命令模式
一.命令模式-定義?
?????????命令模式(Command Pattern)
? ??????第一點(diǎn):將一個(gè)請求封裝成為一個(gè)對象,從而讓用戶使用不同的請求將客戶端參數(shù)化
????????第二點(diǎn): ? 對請求排隊(duì)或者紀(jì)錄請求日志,以及支持撤銷操作.
? ? ? ? 說白了: ? 讓我們程序擴(kuò)展性更加好了,耦合降低.
二.命令模式-應(yīng)用場景递胧?
? ? ? ? 當(dāng)需要將方法調(diào)用包裝成一個(gè)對象,以延時(shí)方法調(diào)用,或者讓其他組件在對其內(nèi)部實(shí)現(xiàn)細(xì)節(jié)不了解的情況下進(jìn)行調(diào)用的時(shí)候可以使用命令模式.
? ? ? ? 場景一: ? ?應(yīng)用程序支持撤銷和恢復(fù)
? ? ? ? 場景二: ? 記錄請求日志,當(dāng)系統(tǒng)故障這些命令可以重新被執(zhí)行.
????????場景三: ? 想用對象參數(shù)化一個(gè)動作以執(zhí)行操作,并且用不同的命令對象替換回調(diào)函數(shù).
三.學(xué)習(xí)方法:分析命令模式
????????第一步:基本概念(了解)
? ? ? ? 第二步:確定框架模式
? ??????第三步:分析角色(每一種設(shè)計(jì)模式里面都會有角色劃分)不同場景下角色不同鲫竞,一個(gè)類擔(dān)當(dāng)角色達(dá)到3個(gè)之多
????????例如:一個(gè)User類(具體產(chǎn)品類昵济、抽象產(chǎn)品類)尚猿,在架構(gòu)設(shè)計(jì)存
????????第四步:分析單個(gè)角色類結(jié)構(gòu)(開源項(xiàng)目) ? ?
?????????第五步:分析單個(gè)角色意義(子類意義所在)
??????????第六步:分析模塊
??????????第七步:性能優(yōu)化問題
????3.1分析命令模式角色劃分?->案例分析
? ??????4個(gè)角色楣富?->自己寫框架凿掂,看框架,每一個(gè)類是什么角色?
? ? ? ? ? 角色一 ?: ?接收者
? ? ? ? ?角色二 ?: ?命令接口
? ? ? ? ?角色三 : ?具體命令
? ? ? ? ?角色四 : ?請求者
?????3.2 命令模式->原理案例
????????搭建這幾個(gè)角色(類結(jié)構(gòu)搭建出來)
????????命令模式規(guī)范?
????????1.角色一:接收者->Reciever
? ? ?????->創(chuàng)建命令行項(xiàng)目:new->project->maxOS->CommandLine Tool.創(chuàng)建項(xiàng)目
????????->創(chuàng)建CocoaClass類,命名為Reciever
????2.角色二:命令接口->CommandProtocol(協(xié)議)
? ? ?->創(chuàng)建Header File.h文件,命名為CommandProtocol.h
????3.角色三:具體命令->ConcrateCommand
????->創(chuàng)建CocoaClass類,命名為ConcrateCommand
? ? ??4.角色四:請求者->Invoker
? ? ? ->創(chuàng)建CocoaClass類,命名為Invoker
????3.3?命令模式->具體案例
? ???????每一個(gè)角色之間關(guān)系和調(diào)用
?????????案例:電腦關(guān)機(jī)和開機(jī)庄萎?
?????????層層遞進(jìn)
? ? ? ?角色和角色,順序可以顛倒
????????確定角色踪少?
????????關(guān)聯(lián)角色?
???????????首先:關(guān)聯(lián)請求者
???????????其次:實(shí)現(xiàn)接收者
???????????最后:實(shí)現(xiàn)命令角色
? ? ? ? ??1糠涛、命令接口->ComputerCommandProtocol
?????????2援奢、具體命令->實(shí)現(xiàn)類
???????????兩個(gè):開機(jī)命令、關(guān)機(jī)命令
???????????開機(jī):MacStartupCommand(遵循我們的協(xié)議->接口->標(biāo)準(zhǔn))
???????????關(guān)機(jī):MacShutdownCommand?(遵循我們的協(xié)議->接口->標(biāo)準(zhǔn))
?????????3忍捡、接收者->電腦->MacComputer
?????????4集漾、請求者->Invoker
? ? ? ? ??面向協(xié)議編程->將所有的功能抽象為協(xié)議