设计模式总结通过命令模式Word文档格式.docx
- 文档编号:22825459
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:27
- 大小:145.46KB
设计模式总结通过命令模式Word文档格式.docx
《设计模式总结通过命令模式Word文档格式.docx》由会员分享,可在线阅读,更多相关《设计模式总结通过命令模式Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
listofreferences,relatedreadingor
externallinks,but
itssourcesremainunclearbecauseitlacks
inlinecitations.
Please
improve
thisarticlebyintroducingmoreprecisecitations.
(December2012)
In
object-orientedprogramming,the
commandpattern
isa
behavioural
designpattern
inwhich
anobjectisusedtorepresentand
encapsulate
alltheinformationneededtocallamethodatalatertime.Thisinformationincludesthemethodname,theobjectthatownsthemethodandvaluesforthemethodparameters.
Fourtermsalwaysassociatedwiththecommandpatternare
command,
receiver,
invoker
and
client.
Aconcrete
command
objecthasa
receiver
objectandinvokesamethodofthereceiverinawaythatisspecifictothatreceiver'
sclass(即在concretecommandObject里面有receiver的成员变量,并且有触发receiver动作的方法,这个方法是所有receiver所共有的接口级别的方法).Thereceiverthendoesthework.
Aconcretecommandobjectisseparatelypassedtoan
object,whichinvokesthecommand,andoptionallydoesbookkeepingaboutthecommandexecution.Anyconcretecommandobjectcanbepassedtothesameinvokerobject(即在Invoker有一个接受ConcreteCommand的方法,形如setCommand(XXX)).Bothaninvokerobjectandseveralconcretecommandobjectsareheldbya
client
object(Client创建具体的ConcreteCommand).Theclientcontainsthedecisionmakingaboutwhichcommandstoexecuteatwhichpoints.
Toexecuteacommand,itpassesthecommandobjecttotheinvokerobject.
Seeexamplecodebelow.
Usingcommandobjectsmakesiteasiertoconstructgeneralcomponentsthatneedtodelegate,sequenceorexecutemethodcallsatatimeoftheirchoosingwithouttheneedtoknowtheclassofthemethodorthemethodparameters.Usinganinvokerobjectallowsbookkeepingaboutcommandexecutionstobeconvenientlyperformed,aswellasimplementingdifferentmodesforcommands,whicharemanagedbytheinvokerobject,withouttheneedfortheclienttobeawareoftheexistenceofbookkeepingormodes.
Contents
[hide]
∙1
Uses
∙2
Structure
∙3
Terminology
∙4
Example
∙4.1
C#
∙4.2
Java
∙4.3
Python
∙4.4
Scala
∙4.5
Javascript
∙5
Seealso
∙6
References
∙7
Externallinks
[edit]Uses
Commandobjectsareusefulforimplementing:
GUIbuttonsandmenuitems
Swing
BorlandDelphi
programming,an
Action
isacommandobject.Inadditiontotheabilitytoperformthedesiredcommand,an
mayhaveanassociatedicon,keyboardshortcut,tooltiptext,andsoon.AtoolbarbuttonormenuitemcomponentmaybecompletelyinitializedusingonlytheAction
object.
Macro
recording
Ifalluseractionsarerepresentedbycommandobjects,aprogramcanrecordasequenceofactionssimplybykeepingalistofthecommandobjectsastheyareexecuted.Itcanthen"
playback"
thesameactionsbyexecutingthesamecommandobjectsagaininsequence.Iftheprogramembedsascriptingengine,eachcommandobjectcanimplementa
toScript()
method,anduseractionscanthenbeeasilyrecordedasscripts.
MobileCode
UsinglanguagessuchasJavawherecodecanbestreamed/slurpedfromonelocationtoanotherviaURLClassloadersandCodebasesthecommandscanenablenewbehaviortobedeliveredtoremotelocations(EJBCommand,MasterWorker)
Multi-level
undo
Ifalluseractionsinaprogramareimplementedascommandobjects,theprogramcankeepastackofthemostrecentlyexecutedcommands.Whentheuserwantstoundoacommand,theprogramsimplypopsthemostrecentcommandobjectandexecutesits
undo()
method.
Networking
Itispossibletosendwholecommandobjectsacrossthenetworktobeexecutedontheothermachines,forexampleplayeractionsincomputergames.
ParallelProcessing
Wherethecommandsarewrittenastaskstoasharedresourceandexecutedbymanythreadsinparallel(possiblyonremotemachines-thisvariantisoftenreferredtoastheMaster/Workerpattern)
Progressbars
Supposeaprogramhasasequenceofcommandsthatitexecutesinorder.Ifeachcommandobjecthasa
getEstimatedDuration()
method,theprogramcaneasilyestimatethetotalduration.Itcanshowaprogressbarthatmeaningfullyreflectshowclosetheprogramistocompletingallthetasks.
Threadpools
Atypical,general-purposethreadpoolclassmighthaveapublic
addTask()
methodthataddsaworkitemtoaninternalqueueoftaskswaitingtobedone.Itmaintainsapoolofthreadsthatexecutecommandsfromthequeue.Theitemsinthequeuearecommandobjects.Typicallytheseobjectsimplementacommoninterfacesuchas
java.lang.Runnable
thatallowsthethreadpooltoexecutethecommandeventhoughthethreadpoolclassitselfwaswrittenwithoutanyknowledgeofthespecifictasksforwhichitwouldbeused.
Transactional
behavior
Similartoundo,adatabaseengineorsoftwareinstallermaykeepalistofoperationsthathavebeenorwillbeperformed.Shouldoneofthemfail,allotherscanbereversedordiscarded(usuallycalled
rollback).Forexample,iftwodatabasetablesthatrefertoeachothermustbeupdated,andthesecondupdatefails,thetransactioncanberolledback,sothatthefirsttabledoesnotnowcontainaninvalidreference.
Wizards
Oftenawizardpresentsseveralpagesofconfigurationforasingleactionthathappensonlywhentheuserclicksthe"
Finish"
buttononthelastpage.Inthesecases,anaturalwaytoseparateuserinterfacecodefromapplicationcodeistoimplementthewizardusingacommandobject.Thecommandobjectiscreatedwhenthewizardisfirstdisplayed.EachwizardpagestoresitsGUIchangesinthecommandobject,sotheobjectispopulatedastheuserprogresses."
simplytriggersacallto
execute().Thisway,thecommandclasscontainsnouserinterfacecode.
[edit]Structure
∙UPDATE:
TheexplanationfortheReceiverblockaboveshouldbe"
Theactualworktobedonebythecommand(action)"
[edit]Terminology
Theterminologyusedtodescribecommandpatternimplementationsisnotconsistentandcanthereforebeconfusing.Thisistheresultof
ambiguity,theuseof
synonyms,andimplementationsthatmayobscuretheoriginalpatternbygoingwellbeyondit.
1.Ambiguity.
2.Theterm
isambiguous.Forexample,
moveup,moveup
mayrefertoasingle(moveup)commandthatshouldbeexecutedtwice,oritmayrefertotwocommands,eachofwhichhappenstodothesamething(moveup).Iftheformercommandisaddedtwicetoanundostack,bothitemsonthestackrefertothesamecommandinstance.Thismaybeappropriatewhenacommandcanalwaysbeundonethesameway(e.g.movedown).Boththe
GangofFour
andthe
Javaexamplebelow
usethisinterpretationoftheterm
command.Ontheotherhand,ifthelattercommandsareaddedtoanundostack,thestackreferstotwoseparateobjects.Thismaybeappropriatewheneachobjectonthestackmustcontaininformationthatallowsthecommandtobeundone.Forexample,toundoa
deleteselection
command,theobjectmaycontainacopyofthedeletedtextsothatitcanbere-inserted,ifthe
commandmustbeundone.Notethatusingaseparateobjectforeachinvocationofacommandisalsoanexampleofthe
chainofresponsibilitypattern.
3.Theterm
execute
isalsoambiguous.Itmayrefertorunningthecodeidentifiedbythecommandobject'
s
method.However,inMicrosoft'
WindowsPresentationFoundation
acommandisconsideredtohavebeenexecutedwhenthecommand'
methodhasbeeninvoked,butthatdoesnotnecessarilymeanthattheapplicationcodehasrun.Thatoccursonlyaftersomefurthereventprocessing.
4.Synonymsand
homonyms.
5.Client,Source,Invoker:
thebutton,toolbarbutton,ormenuitemclicked,theshortcutkeypressedbytheuser.
6.CommandObject,RoutedCommandObject,ActionObject:
asingletonobject(e.g.thereisonlyoneCopyCommandobject),whichknowsaboutshortcutkeys,buttonimages,commandtext,etc.relatedtothecommand.Asource/invokerobjectcallstheCommand/Actionobject'
sexecute/performActionmethod.TheCommand/Actionobjectnotifiestheappropriatesource/invokerobjectswhentheavailabilityofacommand/actionhaschanged.Thisallowsbuttonsandmenuitemstobecomeinactive(grayedout)whenacommand/actioncannotbeexecuted/performed.
7.Receiver,TargetObject:
theobjectthatisabouttobecopied,pasted,moved,etc.Thereceiverobjectownsthemethodthatiscalledbythecommand'
method.Thereceiveristypicallyalsothetargetobject.Forexample,ifthereceiverobjectisa
cursor
andthemethodiscalled
moveUp,thenonewouldexpectthatthecursoristhetargetofthemoveUpaction.Ontheotherhand,ifthecodeisdefinedbythecommandobjectitself,thetargetobjectwillbeadifferentobjectentirely.
8.CommandObject,routedeventargs,eventobject:
theobjectthatispassedfromthesourcetotheCommand/Actionobject,totheTargetobjecttothecodethatdoesthework.Eachbuttonclickorshortcutkeyresultsinanewcommand/eventobject.Someimplementationsaddmoreinformationtothecommand/eventobjectasitisbeingpassedfromoneobject(e.g.CopyCommand)toanother(e.g.documentsection).Otherimplementationsputcommand/eventobjectsinothereventobjects(likeaboxinsideabiggerbox)astheymovealongthe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计模式总结 通过命令模式 设计 模式 总结 通过 命令