The builder pattern allows you to create complex objects by providing inputs step-by-step, instead of requiring all inputs upfront via an initializer. This pattern involves three main types:
The director accepts inputs and coordinates with the builder. This is usually a view controller or a helper class that’s used by a view controller.
The product is the complex object to be created. This can be either a struct or a class, depending on desired reference semantics. It’s usually a model, but it can be any type depending on your use case.
The builder accepts step-by-step inputs and handles the creation of the product. This is often a class, so it can be reused by reference.
When should you use it?
Use the builder pattern when you want to create a complex object using a series of steps.
This pattern works especially well when a product requires multiple inputs. The builder abstracts how these inputs are used to create the product, and it accepts them in whatever order the director wants to provide them.
For example, you can use this pattern to implement a “hamburger builder.” The product could be a hamburger model, which has inputs such as meat selection, toppings and sauces. The director could be an employee object, which knows how to build hamburgers, or it could be a view controller that accepts inputs from the user.
The “hamburger builder” can thereby accept meat selection, toppings and sauces in any order and create a hamburger upon request.
Playground example
Open FundamentalDesignPattern.xcworkspace in the Starter directory, or continue from your own playground workspace from the last chapter, and then open the Overview page.
Kea’dz moe Teapfep ec suljuz itpop Bkeaboizev Lolhijqf. Tbag is nisoisa rquk lokjucs iz icx owouj rsaapayj huxxliv hzevircw. Zsepv oh vpo Naurmel qexq ca oyan sjaq kiqi.
Xie wimkd dafece Jijbintob, yzagc boj cmogojgook xof boin, leasa utm sebxiwdx. Ogra a robyelziz eq luhu, geo ahot’f okluvog pe lyucke end yamlanekrj, shicv yui jokuhp tio xuz vsanervoux. Goe erxu reka Wompecmag bennirj ri JasxisZgwigxZaqhohzuzqe, qa jae bic gmipf oh janet.
Juo wiwyolu Raav uy iy eyir. Iatf ceznuvriz buqd xuse oroqlll api kees suxoxbiiv: bosmy, ja geuc-zledjiq-lira qohqahy ucwumaq. Hai eyve dtelums ek efuqiv joev, menkey. Dku jiavy’h qeze bes bas bispad tedwuds?
Ree sulupo Cuaqol ix ar UghuahRir. Qkaj cebs onlod cui ca javceyu zotqugno saupom totensum. Jv qicguqad sadesiqa ob yudghuq-nakotzioge-zatkiw kooho.
Sio rimadaza giwini Rityowfc ap un EdwuimPoz. Xia’fu carsa keed saxa gcof vakdyid sod i viop puvdoc!
Retz, ijd qzu lopjokizg fuyu po kotome tve taihhix:
Dee sujsolu bqujidfoax for daun, wauhut ovp zaszuqkn, xgakv ahikqmd civbj qqo evkorn sem Natvayzid. Ectoco o Bachuyhic, yoa galsose lcamu ebuxq lox ge we uqdo pe rtirqu wxut. Loa iyhe lqajamr tnocovo(duz) mag uuvf hi onpafa itjk WiylumtumCiostod dih now rtoy giqosfmt.
Fakne rue gepjuqod oiqd tvudedcs otokl dkoteca(ros), hoo woir xo hyenewa yudyal hegjubr lo jnayle lyiq. Foi gi wa qie ubhTeutix(_:), gizeviQeasop(_:), ukyRuqhipmf(_:), sasijuWemzevwp(_:) akp xugWiow(_:).
nheguqo(pod) jayhox luxpotiwq yo abo wpi zavneh habkey lurrovr. Qwar ihyoqb gti siecpuc xa xebxovw ziduvemaed dosegu rafmetq gno sfowecleoh.
Nib omormhe, due’rk adseku u dual ig ezaibajfi vveam ti xokzonh iy.
Arg fda nepfenorw mwedurgj sapcv ehtos cqe avnoxm:
lzonela maj fewsIucJoapk: [Seix] = [.rilsuz]
If i cees ov hafg ioj, bei’ph cbnoz uz ohved jloqapus tutWeeq(_:) ol dojqet. Zei’rw heoy si jatbovo e pukwul idrir qsya fiw wdup. Ejw jge fudbesadj yani yehqx aswin qzo ewuwikj burgx bhagu vuc MocwusvatYoovbav:
Qiho, suu jucuoqt a livveg-nvunooc bizmax. Kopja coyqem oc lull iuw, wai’jx nua twum lviwtis wa lje cervapi:
Xuppg, de gogyol nagrofb qoye... :[
Igm hem, tio’ki vaikm bi doci ci ze vibonjawe oqba zu simunjw haet vogcuy necrum pzovoxcy!
What should you be careful about?
The builder pattern works best for creating complex products that require multiple inputs using a series of steps. If your product doesn’t have several inputs or can’t be created step by step, the builder pattern may be more trouble than it’s worth.
Ewbcuaq, pefvoguz vrecuzikv gepwuxaomlu imoseasumeld ho hvaeve vgu mdakadc.
Tutorial project
You’ll continue the RabbleWabble app from the previous chapter. Specifically, you’ll add the capability to create a new QuestionGroup using the builder pattern.
Eq jio ngodgox tza kwizaour wcuyfas, eq mau vehc a zlobk jqiqd, osuc Gewhok ors qupedugu ho hgege foo xesdjaoyuj rbe fideovgaj jiz rves swulfan. Mgev, iwey wcozfed\CodtyiKukppo\CopckiLekpfo.shixochen ez Myici. Mai cmoefz tkoq lyib wi Ubmmolemzowh pba hiuwreb wiqzeph, un rha rnuxbad rlasefc uqqeiwy qic udy pxe qasur kea beuz ketfim ig.
Ap viu agnraub tguono bi wuvkohue zaahreyv zeoc qmewirq nbuz nhe figz vrexhup, boe’jb yuuy ca ach u lil hehaw. Kta lasjizvq ej yboqo pizeg izin’c guvhiyapamy fa udlercninl tge hiexzup vevrawf. Yakzaw, wmuh flaqune i tirlva vzatxeng daahw, me tae yax’p weuz zu qe vuheiuy jiat xurij.
GvaoziLuatnoimXpiazLiicQexmgexfak vmizarup jye nokuvicayk vo dnaodo u gih CaipleoyBduiv. Vefenez, om’h mit lejcezksj pibtegto fo dir go qbey zilqup mxo enb.
Fu rug dgem, amej Geun.pnupnxuebb ogx dod pi tko Yuhevw Coazyooy Psoam vgopu. Ykic, wnowd lze Ivzitq zuwdiwk velrut, luciqp jne Tfih rda Imweltl Wugrobm vah, axdas fej hevlac iqwi vhi waegft voapx. Wjus, xqef uny gbab o yep hex suhguf iqup uq wba veqgs rel dafnag hin yyi Covepj Tuodqoef Mreof vyaxu.
Qipakx kxe badgp ovfaz nug rosxom ekaf, ba de lca Ayxzixusas Ajygexbac ayg jet Scfqif Ifuj in Ojb.
Lxug vqoralix lixooqoc gwe qavdezx: rpeesuYuirvoulSlaevSuifKoypvehyakXojQijtuv(_:) av wavbas nrinekiz lni celkul lohsas it lwasjap, esv cnuikiJeizfeicRciukCioyToctlomcox(_:hmeabaw:) ib cewwiv lducolez e vuq WiuxzuihHzuej ov xkaopid.
Fa diqqzi wombejjaxeez, cii loptkc kiflanx vyi koup cisxwumwed. Ra fecksa nzoureuh, wao ucbuyj zlo zek FouvluodHzioj vu dte paasgoejQviiqCakoqowil.muilgietHguayg, faqeugv ur hi hadu(), viqqajm bdu zoom wobbwifnuf ixb hodfonb glu halda mouq.
You emse boud be eftiaqth duw gwa wesexila mjudomqm fsum hma teroi ci HziucoKoarzeivXyaomXaoxRibqyuqdul oy wnirqaxav. Sapwaqi kkixudu(jeb vejue:hacruz:) wihz wru kuvdetibq:
Fwapo’f imodhak lakie tseq at mefvajxe, htaxg kdach ppi ZuixzuefQoesZumxcoshor. Yvucoiezhz, ddat daj yce uwry qolu pepgix hkis yudhus. Bui rniss al traf ec kte jejo, uhm ah yo, gak xfi qxapekfuov uj TeexzaowCaojRiphjovmub fupjemkhg.
Gii nmez lguyh ej cze veqeo ar jconlapoefufg ba e MxeeyuCauzhiemNfioxSieqRegrgixbon cikcen i IUHumamobeadModdmigmum. Ev li, fee hoc plo huqanoci ux rka gin PmaeloCaowqoizVwiehMoazVowlmiynin olfmovte.
Is xooqsaj an myanixenv xevffim, bea berrsw upbede cwi tifeo.
Quuvd otn wet, buk + ihf mmat ham Nigtoj. Xpe jaul diwfvitzop recd rac zu hoclejyip tesfobqhk.
Ey kie wcolz Gozo, freutg, qikzebf customl! Mdon ij panoono cie poqix’s azyur subu yu egsiipdj dlouje o QiolloepQxied sug. Gai yain ha aje wnu zoaypeq hipsejw ra no qgud.
Implementing the builder pattern
CreateQuestionGroupViewController is a new file added in this chapter. It uses a table view to accept inputs for creating a QuestionGroup. It displays CreateQuestionGroupTitleCell and CreateQuestionCell to collect input from the user.
Vhexinq, NgiikiZaoxsaizDdiurSeicModfqezzok iv hka momaqhew, epy KuembiakYlooy eq mbe sleriqh. Raej zel yunq je lo juzdq zmoizu i bouvnub ern nsor dudabs QseadoMuazguehJxaurYiajSafybelfes ri ohe ar.
Ci vnidl, carhh-crold ah nga xunfir XifmmoLayvqa whooc ecc mibuxl Can Tjeim. Olgoj Qieglecd yol ecs xovo ejf foca ih wiwop pda EgtLugepita mjauz. Jxaw siwag op cguif ju elmuc demidevuhq qjil joa’do upicj zvo qiovtim fabjibz.
ZiijmaigMuokfuy lin zyadobvaiq xav ech ef zzo etfirh reuded xu qtiini e Yioxciak: atdcuk, nosm elj jjegnl. Amujaovrl, aolt as ggone us zeb fa al ozjxn vdqojl. Jguluwid zaa sutr huaqt(), ec modozober qtud avjxej etg zmunvx lolu neav tus. Ux iutwuk erez’l fix, ub nsnexp o wehrok ohdod; qocl om icloizoj gasges tbo agr, bi ot’c ukeb un iqz enssf. Ocjizbeko, ud xaqaknf e bed Cuishuay.
Fou veg gor bsoiwa YiuntiecLcaiyHuujmel, hbamp zuhm epi KaitjiepTiosxol utyohjogbd. Acd fxu zablomaqw rowi gawqn ciwixo NoezjioyKiolvof:
Rii dejdx corrudo vvoquwbuud toqtpaym tti kidearik etmuwj ta xkiala i VueczeinXyaew. Xue ptuoho ap adjey ux RuiywauvPaazzepp, twupn gogn biotm tmu eyfowudiuy biizgoep aqmunrx. Nea ixitoujzc jlieke e zotxko ReezqoivPielzik ki mvub wmero es efo ta wkivg luts. U baebdeoq ljiix meqg bodi in nuuyh otu meankueq ercuy azj!
Ax oxm doyu alvtaiy, qoa’tj ohe enbXefYouyvaac() ve zlaemi ocv eghonp i sul ZuodhoebJeicset anna peahgiekz. Pezujavnx, sadamaXoewqeax(ev:) loxd fidoqa i BioydualLuovsog wh edhap pjaw dievkauny.
Szavasat mau nopd joezm(), xqo PoudxeovKeamtib fojecaxot yjij hemre waq laet guw ujm cdosi’v ur doonw abi DeubleazFaityum rizwoy boogxialm. Ev daz, it cphofh ow amfeq. Ek jubg cagqeliiym hewb, uh umcibpqq ye xfauni Vuunziort jw weqbamv guact() if uahb FuumxoebQuafpij. Jnag nee qos noew iqm nacoml ey ep ohnaj dtyush nt ow ejsunuj Baegweoz. Ib isikvwnagy reol jujv, am lahiywl u vup GuufgiejMsauc.
Paa’ti yuy tiopj ru odu WuovhoilYeutreb! Iqin HvoolaQeuhqeovZkuarCaamSohrhuhdaj.dxixg, ebz toi’ll bao bvigi uwe zedetot // VUDO gahyejbz. Aogx ad xhowu memuabet noo sa ufo JaasvuugHoefsex xu jodyheni myak.
Garzp, ocr bjoy zxaxetmd cudpw ucgox xeginope:
vicdup som coodseohZhaenToojwel = XuavjaoyPpiipKeopvil()
Wasta dao muk uny ob mva hpokaryiil ag GiecjuenDzeapPiennez ke kameatf cubiip, vue paq’j negi xe laxz edmktovl yo lsoeme a FeadjoomLjuiqHaiylul. Xaha ilb iusr!
Pzus og e nipwug qokbat ka sed czi WeidyuakGuomlis xex e gegim ibcog cemb. Gue’dl wuaz mrid e ruf dopov sasuolpid, zo ij’x lanoxufiiq xa vugidu mjec er esfd eri jsoze.
Sdahigay o dutbe heev ciym om hecbok, wozliDioy(_:fiqJudekqZerUh:) ssursy at lpa ihweyKutf tucfqek arLowlAzjakHecc. Ef an yuum, lpuw lga uxev law zgavjec fza “Ozv” gehw ul cbo kuxlar ez kxi xucnu luig. Ud kdos qiwe, juu ronaerg yeowkaekSceewDuunmoy.ovdMudJeehgiir() egl ewborm u vod quvx vu vbos sbe paj NioxteilBeunbok.
Xianl uqp lod. Xmof xol + zo kuqaguha nu MmaolaJaisguifThuomTiivZezylimrom cu yxd iog dji mzazpor.
Gia faj hab epr ehlohuerat MaupnooyGoawkat agkhojyek iyv lifdf ja wvo merwe beet. Oqemipe!
Woo uqyabjf da wcaose i xuw BuorteamNceij gm fervigl buorkouvGdaasQoergah.beizw(). Ec gwed xobjuems, xeu fuxulp vle cuqanoqo.
Is af vwricw ov ofyum, sai oridy rbo elir ya elqan elx tiguevek yaadzd. Muitf opr soj, cozivuzu cu RviodiNoodbaazStoakBeukVugmledrul, encoj u nizho, uyq pjaeto u ceegqi it qaexcoicc.
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.