Kreativni uzorci dizajna u Kotlinu: Graditelj

1. Uvod

U ovom kratkom članku vidjet ćemo kako implementirati obrazac dizajnera graditelja u Kotlin.

2. Uzorak graditelja

Uzorak Graditelja je onaj koji ljudi često koriste, ali rijetko stvaraju sami.

Sjajno je rukovati izgradnjom objekata koji mogu sadržavati puno parametara i kada objekt želimo učiniti nepromjenjivim nakon što ga završimo s konstruiranjem.

Da biste saznali više, ovdje pogledajte naš vodič o uzorcima kreativnog dizajna.

3. Provedba

Kotlin nudi mnoge korisne značajke kao što su imenovani i zadani parametri, primijeniti () i klasa podataka koja izbjegava upotrebu klasične implementacije uzoraka Builder.

Iz tog razloga vidjet ćemo prvo klasičnu implementaciju u Java stilu, a zatim kratki oblik u više Kotlinovom stilu.

3.1. Implementacija u stilu Java

Počnimo stvarati jedan razred - Naruči hranu - koji sadrži polja samo za čitanje, jer ne želimo da im vanjski objekti pristupaju izravno:

privatni konstruktor klase FoodOrder (graditelj: FoodOrder.Builder) {val kruh: Niz? val začini: Niz? meso od vala: Žica? val riba: Gudač? init {this.bread = builder.bread this.conditions = builder.conditions this.meat = builder.meat this.fish = builder.fish} Graditelj klase {// graditeljski kod}}

Primijeti da konstruktor je privatni tako da samo ugniježđeni Graditelj klasa može pristupiti u njemu.

Krenimo sada s izradom ugniježđene klase koja će se koristiti za izgradnju objekata:

class Builder {var kruh: Niz? = null privatni set var začina: Niz? = null privatni set var meat: Niz? = null privatni skup var fish: Niz? = null private set zabavni kruh (kruh: String) = primijeni {this.bread = kruh} zabavni začini (začini: String) = primijeni {this.condiments = condiments} zabavno meso (meso: String) = primijeni {this.meat = meso} zabavna riba (fish: String) = primijeni {this.fish = fish} zabavna gradnja () = FoodOrder (this)} 

Kao što vidimo, naše Graditelj ima ista polja kao i vanjska klasa. Za svako vanjsko polje imamo odgovarajuću metodu postavljanja.

U slučaju da imamo jedno ili više obveznih polja, umjesto da koristimo metode postavljača, napravimo da ih postavi konstruktor.

Imajte na umu da koristimo primijeniti funkcija kako bi se podržao pristup fluidnom dizajnu.

Napokon, s izgraditi metodu, nazivamo Naruči hranu konstruktor.

3.2. Implementacija u stilu Kotlina

Da bismo u potpunosti iskoristili Kotlin, moramo ponovno posjetiti neke najbolje prakse na koje smo se navikli u Javi. Mnogi od njih mogu se zamijeniti boljim alternativama.

Pogledajmo kako možemo napisati idiomatski Kotlinov kod:

class FoodOrder privatni konstruktor (val kruh: String ?, val začini: String ?, val meso: String ?, val fish: String?) {graditelj klase podataka (var bread: String? = null, var condiments: String? = null, var meso: String? = null, var fish: String? = null) {zabavan kruh (kruh: String) = primijeniti {this.bread = kruh} zabavni začini (začini: String) = primijeniti {this.condiments = condiments} zabavno meso (meso: String) = primijeniti {this.meat = meso} zabavnu ribu (fish: String) = primijeniti {this.fish = fish} fun build () = FoodOrder (kruh, začini, meso, riba)}}

Kotlin dolazi s imenovanim i zadanim parametrima koji pomažu smanjiti broj preopterećenja i poboljšati čitljivost poziva funkcije.

Također možemo iskoristiti Kotlinovu strukturu klase podataka koju ćemo istražiti u drugom tutorijalu ovdje.

Napokon, kao i u implementaciji u stilu Java, primijeniti () je koristan za implementaciju tečnih postavljača.

4. Primjer upotrebe

Ukratko, pogledajmo kako graditi Naruči hranu objekti koji koriste ovu implementaciju uzorka Graditelja:

val foodOrder = FoodOrder.Builder (). kruh ("bijeli kruh"). meso ("slanina"). začini ("maslinovo ulje") .build () 

5. Zaključak

Builder Pattern rješava vrlo čest problem u objektno orijentiranom programiranju kako fleksibilno stvoriti nepromjenjivi objekt bez pisanja mnogih konstruktora.

Kad razmišljamo o graditelju, trebali bismo se usredotočiti na to je li gradnja složena ili ne. Ako imamo prejednostavne građevinske obrasce, tada napor stvaranja našeg fleksibilnog graditeljskog objekta može daleko premašiti korist.

Kao i uvijek, kôd je dostupan na Githubu.


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