Kreatív tervezési minták Kotlinban: Builder

1. Bemutatkozás

Ebben a rövid cikkben megtudhatjuk, hogyan lehet megvalósítani a Builder Design Pattern-t Kotlinban.

2. Építőminta

A Builder mintát az emberek gyakran használják, de ritkán hoznak létre önállóan.

Nagyszerű kezelni olyan objektumok felépítését, amelyek sok paramétert tartalmazhatnak, és amikor az objektumot megváltoztathatatlanná akarjuk tenni, ha elkészültünk.

Ha többet szeretne megtudni, nézze meg itt a Kreatív tervezési minták oktatóanyagunkat.

3. Végrehajtás

A Kotlin számos hasznos funkciót kínál, például megnevezett és alapértelmezett paramétereket, alkalmaz() és adatosztály amely elkerüli a klasszikus Builder minta megvalósításának használatát.

Ezért először egy klasszikus Java stílusú megvalósítást, majd egy Kotlin stílusú rövid űrlapot fogunk látni.

3.1. Java-stílusú megvalósítás

Kezdjük egy osztály létrehozásával - FoodOrder - amely csak olvasható mezőket tartalmaz, mivel nem akarjuk, hogy a külső objektumok közvetlenül hozzáférjenek hozzájuk:

osztályú FoodOrder magánépítő (készítő: FoodOrder.Builder) {val kenyér: String? val fűszerek: Húr? val hús: Húr? val hal: Húr? init {this.bread = builder.bread this.condiments = builder.condiments this.meat = builder.meat this.fish = builder.fish} class Builder {// készítő kód}}

Figyelje meg a kivitelező az magán hogy csak a beágyazottak Építész osztály férhet hozzá.

Most térjünk át a beágyazott osztály létrehozására, amelyet objektumok felépítéséhez használunk:

osztályépítő {var kenyér: Húr? = null privát készlet változó: String? = null privát készlet var hús: String? = null privát készlet var fish: String? = null privát készlet szórakoztató kenyér (kenyér: húr) = alkalmazza {ezt.kenyér = kenyér} szórakoztató ételízesítőt (fűszer: húr) = alkalmazza {ezt.feltételek = fűszerek} szórakoztató hús (hús: húr) = alkalmazza {ezt.meat = hús} szórakoztató hal (hal: húr) = alkalmazza {this.fish = fish} fun build () = FoodOrder (this)} 

Ahogy látjuk, a mi Építész ugyanazokkal a mezőkkel rendelkezik, mint a külső osztály. Minden külső mezőhöz van egy megfelelő szetter módszerünk.

Abban az esetben, ha egy vagy több kötelező mezőnk van, a szetter metódusok helyett tegyünk egy konstruktort ezekbe.

Ne feledje, hogy a alkalmaz funkciót a folyékony tervezési megközelítés támogatása érdekében.

Végül a épít módszerrel hívjuk FoodOrder konstruktőr.

3.2. Kotlin-stílusú megvalósítás

Ahhoz, hogy teljes mértékben kihasználhassuk a Kotlin előnyeit, újra meg kell vizsgálnunk a Java-ban megszokott bevált gyakorlatokat. Közülük sok helyettesíthető jobb alternatívákkal.

Lássuk, hogyan írhatunk idiomatikus Kotlin-kódot:

osztályú FoodOrder magánépítő (val kenyér: String ?, val fűszerek: String ?, val hús: String ?, val fish: String?) {Adatosztály Builder (var kenyér: String? = null, var fűszerek: String? = null, var hús: húr? = null, var hal: húr? = nulla) {szórakoztató kenyér (kenyér: húr) = alkalmazza {ezt.kenyér = kenyér} szórakoztató ételízesítőt (fűszer: húr) = alkalmazza {ezt.feltételek = fűszerek} szórakozás hús (hús: húr) = {this.meat = hús} szórakoztató hal (hal: húr) alkalmazása = {this.fish = fish} szórakoztató felépítés () = FoodOrder (kenyér, fűszerek, hús, hal)}}

A Kotlin megnevezett és alapértelmezett paraméterekkel rendelkezik a túlterhelések számának minimalizálásában és javítja a függvényhívás olvashatóságát.

Kihasználhatjuk Kotlin adatosztályának felépítését is, amelyet egy másik oktatóanyagban találunk meg.

Végül, valamint a Java-stílusú megvalósításban alkalmaz() hasznos a folyékony ülepítők megvalósításához.

4. Felhasználási példa

Röviden, nézzük meg, hogyan kell felépíteni FoodOrder objektumok, amelyek a Builder minta megvalósítását használják:

val foodOrder = FoodOrder.Builder () .kenyér ("fehér kenyér") .hús ("szalonna") .fűszerek ("olívaolaj") .build () 

5. Következtetés

A Builder Pattern egy nagyon gyakori problémát old meg az objektum-orientált programozásban, hogyan lehet rugalmasan létrehozni egy megváltoztathatatlan objektumot sok konstruktor megírása nélkül.

Az építtető mérlegelésekor arra kell összpontosítanunk, hogy az építkezés bonyolult-e vagy sem. Ha túl egyszerű építési mintáink vannak, akkor a rugalmas építőobjektum létrehozásának erőfeszítése messze meghaladja az előnyöket.

Mint mindig, a kód elérhető a Githubon.


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