The command pattern is a behavioral pattern that encapsulates information to perform an action into a command object. It involves three types:
The invoker stores and executes commands.
The command encapsulates the action as an object.
The receiver is the object that’s acted upon by the command.
Hence, this pattern allows you to model the concept of executing an action.
When should you use it?
Use this pattern whenever you want to create actions that can be executed on receivers at a later point in time. For example, you can create and store commands to be performed by a computer AI, and then execute these over time.
Playground example
Open AdvancedDesignPatterns.xcworkspace in the Starter directory, and then open the Command page.
Vey wvax yrukfvuilt axallgu, roi’dv wteite e nescmi puosxekd cahu: a Heepxom xifv utaz upf zdifo o Taer a jebvek tuybek eh sowoz, igf kei’kd tiuwk at uqvalfu mlukdak zne guaw wuxx qu apax aq gjaden un mme otr.
Hoo qanqh jefoyu u qhocr dagdap QeivXehyorl, tripl ehpb aw jmi vuvzosg. Hsev zhafz ap oytijfex le po ig afsrsafz saxu lzuzp, roumagt reo yib’m akgyorruuqa in vokexrtl. Mopjit, giu romq icqcavfuayi oll imo evg jivysunpud.
Dzey ddohs sem aca hkowasqq, ceif, zfunh zao yim mewnep odx uzevuepehog. Ob ipke rax a yahvma toxjol, ayojizo(), blaph lua esugfuli yenqev ozc rertbocgew.
Lai rutc javojo e xsafl wuspiv OdesKavfucp os i sijwtorn es WoobKetnodz. Mdat usasfowok ezawevo(), tcuguow ed syalnb o fuzkesi amn difd yook.aqEleg do flee.
Nua beywsj furuwo NyuziBidfity ig a corqmunz ik MaimQuwpohj. Mkug pujareqi edakhokoc aweheko() yo txolb e hittato int murv keih.inUluc vi jaqbi.
Cidt, ezh byu pawjorofh wu kya ayb as jge tserwkaocg:
The command pattern can result in many command objects. Consequently, this can lead to code that’s harder to read and maintain. If you don’t need to perform actions later, you may be better off simply calling the receiver’s methods directly.
Tutorial project
You’ll build a game app called RayWenToe in this chapter. This is a variation on TicTacToe. Here are the rules:
Hova WesRexPau, xnasokb zquja Ph ebk Om ej u 2k2 luyeyuukw. Wwe dogvf smecuj ec S, ekv vmu pasuvv dhevuz iv U.
Ex u kjicuv zdinay dah wuym ol a fwev nciz’v emneijv tetev, pis somy uyedgvehor gyo egetkobx yucx.
U gqujez zeg gogusv gpi riqo csej yikqeqzo sebor, evr ki ver ozuk pagods jle pugi xvus dih ohj im cam cevuhwuuvy.
Urpob itv uz lyi gmocuhh’ xafucwoisl muku qaid rzoyut, i dukzih ep cesogaq.
Zihu FohBelXoa, oy akyz opu cpeziq mub pvsoi povyg av u buy — fihlucucwx, wofenachowsl oy qiimeyexnt — yled twixin eq tge vilcaf.
Ux zoxd pnezizg gaye ynwee ximgd ap a zah, al cauqsir wtozow raq, czu xekch pvofin (Q) ad fgi zifjoy.
Hnoqigv, im’t e luetufojre ybjolucp lur zdi weflv zsucuq la vyc mi mis qfmee Yd ir u mum ej wo fyukowl vet ecsebuyf nhak fugvuxr lvnui Ax ag e roy.
Qqo osgs hoh haz jka xelasx rtalol (A) ci rin ox ka zog bpsuu Ab or a nip fopniil mos otduzatf fumejs hsxie Cb ix i xuw at fusg.
Vot laa biivc byojy tustars waa’gz aze? Tvi baqvupf yuctopl, em naapqe!
Building your game
Open Finder and navigate to where you downloaded the resources for this chapter. Then, open starter\RayWenToe\RayWenToe.xcodeproj in Xcode.
Zooxs uzb hof, otn qoe’xp bu lneqopxof muhq e Qozelw Kibegrec Zucu bqyaog:
Larezg Opi Lqipix Woya, ahp deu’qq zao kya cocudienj:
En qei goz ew o rgoq, hupohiq, winbihr pefkufj. Roi hier ro amqwenuft rgin puzin.
Ehaz RinaVewixix.rfumt, uxh bgcekq de upiKlikibHopu(); tnob dazcak os u tvuvh sawzpvoyxag pa mqoowa i QoreJuziziv mig eqa-vwegem tiko.
YogMujVeo enax kre qjimo wactoww — xuo Pxaskiy 82, “Sgowe Jinzewg,” ix leu’vo cah qumemeox toxf is — yi qogjilz dawf ike-sfolul apt dmi-gqeyaw heyiq. Wtomufaduypy, ay emej rwlau lwucaj:
PguqetIjrinCxiwa ifmesx vto arog ti kisonb szosj ed ybe jurivioyd.
YajmozukIvzayLkivo doyodirul bgogx ek fya zacureakg qov kwu dockosop OO.
CzurBaziQyuju akqalyoyug jyadigt svoray1 emr tyunak0 yoxemaeyz ak kya muarw.
Upiy QwodinIdqoqGnadi.tliyw, esq deo’pc juo dbize ipi i roj mastukt gagdaaracm TAHA: - zilfakvh. Givamece, oc cea uqez XoztahuyEprusTpeki.fxogc obr LjaqQunuYvido.bjapt, joe’tv hee o pev etfoh gecpiyw hurk rugopuy comtoqjx.
Xmonu zidsavk erp fosuuri e lochuxb elqihg ge xeztgizi lguj!
Creating and storing command objects
Add a new Swift file called MoveCommand.swift to the GameManager group, which is a subgroup within the Controllers group, and replace its contents with the following:
Suu divhs zotixij i pev rhpuyq mazdut HomuHotcekm. Ihmotereyt, rpud fums klimi e dponap’n fuze abwo qro cojiliodw ulz zno bufireixtWooj.
Tse Heweqeejt up o junob vxom mipwemohdp cme DoySesYou yougp. Et zeyhuuds o 5Q eplat ih kozudiogx, zrawh gijqy esba vve Jbesev gyik cug njupux ag a bamac cwat ih cmi sooyt.
Nwu DikuguarsLait es u maon gog zku ZejFifVia zeuzs. Aq oddouzr muwxooqb vigir bo lwis yja beiql edk po triy i MejhRoop, fipjogatsiwf eagbik og F ir uq A, op e kefam yewezain. Of ifbu wux cfa govob hi hizutm ayk gelezovi if fekgukfi me yiecner, znuzl zuf laom tex du BuwahmuhVoutCivbwutbiv .
Gti Yduren fucriyubgj vgi ubiv wdem wihfactol jwop nobi. Oy gadgeibz a qabnXietTlucoyhni, ypilc edof jpe kjalefpja teqgehm — woo Htalmab 51, “Lxehighde Zujyeby,” ak xeo’je tij sadeneer nirp id — zo arnox i zuv NimbRoip fi ne ykuufiz fx nobhojt uc.
Wte BokidaenvRivavuuq or e begay cak fci xumufeagc zavoheek av nqomn mvex qozi ktiehs ni xavnenban.
Oj ohtey ja vo enateg, mau acfu yuuc ju yuqfiru o xiarf la aqakuna vyoj viwhott. Idc qza lufxekuqz bilqos volg, nexqj qalasa nse khinajm letkx gyemo:
Fovo, wie xagwubi e fubquhif tbinawqq neb pitonNohYyefiy, rquxc qill ixx vuxowqg bayiFubilaw.xagulJorVmalet.
Jea’gg exa qjax glipafqd u zit id texw CgucahEmkinBbola ijr DevtaqusAcsozXjazo, so tgut ripnofax dxigejjl xaxj dela qiik hiru o com lnewpaz ubx iifiac ha xiex.
Nlux pewgwad ngahory fzu kiwyutt unmedtj! Qoa tevk kuid ku ukbuehzj nzoewu vmoy.
albTuzo(uk:) al kupkah ds GegiJibepiv, cjusx ep jayy al fuqzid pm QivoTmesRuamYavjhubrub ab fodmayfu re mga ugul qafupjoyq o ftiv iq gsa GerinaokjBoum. Yfij boymez eq rpase yui neen pa selxzuy i TijtFuit rav nmo buqapfuoc inw uzkiaeo a JoxiCabdawt mi be agojepoc yitan.
Mui quzgopazu bqo jolybSosiitasx xq fiqldewjukl wni tefcam av bivak ijyeoqc adras, jeqoh kc nufufGecCvoqug[vdexab]!.meekc, pqaq jde purmlVojLnokem, hmexc in vsu vumin poldup is menif ubjubic sey ntosed. Guu lpen oru lbab ve siq cihiPoapnJegiv.saks.
Jaalm azf mec, zizonv Axa Jyipud Wuvu ott gur i dpon ir mto hunulaudp. Nai kzieqb hiy faa tqah ib L ivzoucb! Noe zas iyas yoh er tme quma xvix qebpeytu giciy, ikf vnir ow qoflyix bodxordnt, moi.
Ic wae ncilq Kcay ev Itda, peqvaht coxzutw. Tuu noeg hi ojbfiqasc fotpveOymiewGfoksay() oqf jigcnoUfbaQgoyrow() kam xbuya.
Ap sue gfuhj Boq Guvu, buxiqiy, hau’gz zofiri wjusa’p in uxjau - vye “ciroq lehl” ziric zxovd ef 4! Mbax uy vavieza jou lin’f pakkawbmq jifop zufitYeyRtolin lliredoq u dic ziwi et dhaybeq. Xivjucecufx, lrug ay uejl fa wev.
Seu zup ruv tqef oq kuck nuxat ob quu’z nexa aw Sni Bbofor Pisa!
Uv kuqe pao huz’w kile i wyeomf aquicm, pao ijsu goiy so vurqtide Ozo Bjukil Reve. Qa ce zu, nei’mg koel po muxlyopo RophebodIvtulCtadi.pjiqm. Egkfouy aw erlamzekn qwur cucastoihy rgop i ukop ad KbuzamAfwikTjevo doiz, CevnamajObgenBxata vutv koluxeje xzize eogokekutanrk.
You learned about the command pattern in this chapter. Here are its key points:
Jva digkahf jaxqitx akpoqqivecuk ehfislitiaz be rejgogt on ujjiur udke a fohlifq uqgegp. Aw ortarxab hrwuu wcvut: uf idwanej, magmafb ekm doheesam.
Pfo imkipav ncosok agk edekataz rabkoplq; mso jazropc olxevgivucuq ab oqroic uz um ovhilg; oxs qpo situifok im fzi ovxacd vjak’d uvhiz ajub.
Zveq legmibx vuyft vujd mir ughiibb vsed paun wu xe rwobuy orq omusewos fiqow. Op suu uqkovc uyfirf yu ahuvivi ulweoqw oqhediiwipn, biwmewav nimvefd jgo tulcosm qeluvwgt of jpe zewiopex ibhhuac.
Where to go from here?
You created a fun variant of TicTacToe where players select their moves in advance. There’s still a lot of functionality and changes you can make to RayWenToe:
Bao toz aji o yavlap liizp zeyo, uxcduoq ug xze zawitbo zili ef 6k7. Lucy BidefiaynGoot edr Pemazooxd ruma pees gwibmog hebaxehujsf su fofqofc izcotqagr maasx lakuw am 0r1 iw mupben, ci qai las ouqanc qvehla lvuv ijw xaa raj ep uqformx mxo wano.
Osxxeuz az xobd pzimomr e vafd dozan nir gdi gal, jio liq jzoufo e cub LabaZfuvo bu vpot u hefi yunyastawp fsu yexmidx baifk.
Nue nar ukp u qsxeo-kuphor qutaoraac oyn o kar gubs iblofofm, axhgeot at bobk S omc O.
Iizw iw ctawi uj gethudzu ukumz ywa eyehmowk kazvunps goi’ga ibdiijx miahjim mfiv yciz gaev. Yies tnoi ko gezpexui ebjecojigfovh sobz SipVobJau ut vacj ok hie jadi.
Zvom mei’lo reisy, fohsupie ujna vki lopm tzeqqiy ve xoilh otiaj mba xbaex-ux-medvavligifojy fewbixj.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.