Tvorivé návrhové vzory v Kotline: Builder

1. Úvod

V tomto rýchlom článku uvidíme, ako implementovať návrhový vzor Builder v Kotline.

2. Staviteľský vzor

Staviteľský model je ten, ktorý ľudia často používajú, ale zriedka vytvárajú sami.

Je skvelé zvládnuť vytváranie objektov, ktoré môžu obsahovať veľa parametrov, a keď chceme objekt zmeniť, akonáhle ho dokončíme, urobíme ho.

Ak sa chcete dozvedieť viac, pozrite si náš návod Tvorivé vzory návrhu tu.

3. Implementácia

Kotlin poskytuje mnoho užitočných funkcií, ako napríklad pomenované a predvolené parametre, použiť () a dátová trieda čo sa vyhýba použitiu klasickej implementácie vzorov Builder.

Z tohto dôvodu uvidíme najskôr klasickú implementáciu v štýle Java a potom kratšiu formu v štýle Kotlin.

3.1. Implementácia v štýle Java

Začnime vytvárať jednu triedu - FoodOrder - ktorý obsahuje polia iba na čítanie, pretože nechceme, aby k nim vonkajšie objekty mali priamy prístup:

súkromný konštruktor triedy FoodOrder (staviteľ: FoodOrder.Builder) {val chleba: Reťazec? val korenie: String? val mäso: Reťazec? val ryby: Reťazec? init {this.bread = builder.bread this.condiments = builder.condiments this.meat = builder.meat this.fish = builder.fish} staviteľ triedy {// kód staviteľa}}

Všimni si konštruktér je súkromné aby iba vnorené Staviteľ trieda má k nej prístup.

Poďme teraz k vytvoreniu vnorenej triedy, ktorá sa použije na vytváranie objektov:

trieda Builder {var chleba: Reťazec? = nulová súkromná sada varených korenín: Reťazec? = nulová súkromná sada var mäso: Reťazec? = nulová súkromná sada var ryby: Reťazec? = nulová súkromná sada zábavný chlieb (chlieb: String) = použiť {this.bread = chlieb} zábavné korenie (korenie: String) = použiť {this.condiments = korenie} zábavné mäso (mäso: String) = použiť {this.meat = mäso} zábavné ryby (ryby: Reťazec) = použiť {this.fish = ryby} zábavné zostavenie () = FoodOrder (toto)} 

Ako vidíme, náš Staviteľ má rovnaké polia ako vonkajšia trieda. Pre každé vonkajšie pole máme zodpovedajúcu metódu nastavovania.

V prípade, že máme jedno alebo viac povinných polí, namiesto použitia metód setteru urobme, aby ich nastavil konštruktér.

Upozorňujeme, že používame uplatniť funkcie s cieľom podporiť prístup plynulého dizajnu.

Nakoniec s stavať metóda, hovoríme FoodOrder konštruktér.

3.2. Implementácia v štýle Kotlin

Aby sme mohli Kotlin využiť naplno, musíme sa znovu pozrieť na niektoré osvedčené postupy, na ktoré sme si v Jave zvykli. Mnohé z nich možno nahradiť lepšími alternatívami.

Pozrime sa, ako môžeme napísať idiomatický Kotlinov kód:

trieda FoodOrder súkromný konštruktér (valček: String ?, val korenie: String ?, val mäso: String ?, val ryby: String?) {dátová trieda Builder (var chlieb: String? = null, var korenie: String? = null, var meat: String? = null, var fish: String? = null) {fun bread (bread: String) = apply {this.bread = bread} fun pochutiny (pochutiny: String) = použiť {this.condiments = pochutiny} zábava mäso (mäso: Reťazec) = použiť {this.meat = mäso} zábavné ryby (ryby: Reťazec) = použiť {this.fish = ryby} zábavné zostavenie () = FoodOrder (chlieb, korenie, mäso, ryby)}}

Kotlin prichádza s pomenovanými a predvolenými parametrami, ktoré pomáhajú minimalizovať počet preťažení a zlepšiť čitateľnosť vyvolania funkcie.

Môžeme tiež využiť štruktúru dátovej triedy Kotlin, ktorú preskúmame viac v inom tutoriále tu.

Nakoniec, rovnako ako pri implementácii v štýle Java, použiť () je užitočné pri implementácii plynulých nastavovačov.

4. Príklad použitia

V krátkosti sa pozrime na to, ako stavať FoodOrder objekty pomocou týchto implementácií vzorov Builder:

val foodOrder = FoodOrder.Builder () .bread ("biely chlieb") .meat ("slanina") .podmienky ("olivový olej") .build () 

5. Záver

Builder Pattern rieši veľmi častý problém v objektovo orientovanom programovaní, ako flexibilne vytvárať nemenný objekt bez nutnosti písania mnohých konštruktorov.

Pri zvažovaní staviteľa by sme sa mali zamerať na to, či je stavba zložitá alebo nie. Ak máme príliš jednoduché konštrukčné vzory, potom úsilie o vytvorenie nášho flexibilného objektu staviteľa môže ďaleko prevýšiť úžitok.

Ako vždy, kód je k dispozícii na stránkach Github.


$config[zx-auto] not found$config[zx-overlay] not found