Creational Design Patterns in Kotlin: Builder

1. Introduksjon

I denne raske artikkelen vil vi se hvordan du implementerer Builder Design Pattern i Kotlin.

2. Byggmønster

Byggmønsteret er det folk ofte bruker, men sjelden lager på egenhånd.

Det er flott å håndtere bygningen av objekter som kan inneholde mange parametere, og når vi vil gjøre objektet uforanderlig når vi er ferdig med å konstruere det.

For å lære mer, ta en titt på veiledningen vår om Creational Design Patterns her.

3. Gjennomføring

Kotlin tilbyr mange nyttige funksjoner som navngitte og standardparametere, søke om() og dataklasse som unngår bruk av klassisk Builder mønster implementering.

Av den grunn ser vi først en klassisk Java-stil implementering og deretter en mer Kotlin stil kort form.

3.1. Implementering av Java-stil

La oss begynne å lage en klasse - Matbestilling - som inneholder skrivebeskyttede felt siden vi ikke vil at ytre objekter skal få tilgang til dem direkte:

class FoodOrder private constructor (builder: FoodOrder.Builder) {val bread: String? val krydder: String? val kjøtt: String? val fisk: String? init {this.bread = builder.bread this.condiments = builder.condiments this.meat = builder.meat this.fish = builder.fish} class Builder {// byggekode}}

Legg merke til det konstruktøren er privat slik at bare de nestede Bygger klassen kan få tilgang til den.

La oss nå fortsette å lage den nestede klassen som skal brukes til å bygge objekter:

class Builder {var brød: String? = null privat sett var krydder: String? = null privat sett var kjøtt: Streng? = null privat sett var fisk: String? = null privat sett morsomt brød (brød: streng) = påfør {this.bread = brød} morsomme krydder (krydder: streng) = påfør {this.condiments = krydder} morsomt kjøtt (kjøtt: streng) = påfør {this.meat = kjøtt} morsom fisk (fisk: streng) = bruk {this.fish = fisk} morsom build () = FoodOrder (dette)} 

Som vi ser, våre Bygger har samme felt som den ytre klassen. For hvert ytre felt har vi en matchende settermetode.

Hvis vi har ett eller flere obligatoriske felt, la oss få en konstruktør til å sette dem i stedet for å bruke settermetoder.

Merk at vi bruker søke om funksjon for å støtte den flytende designtilnærmingen.

Til slutt, med bygge metoden, kaller vi Matbestilling konstruktør.

3.2. Implementering i Kotlin-stil

For å dra full nytte av Kotlin, må vi se på noen gode fremgangsmåter vi ble vant til i Java. Mange av dem kan erstattes med bedre alternativer.

La oss se hvordan vi kan skrive idiomatisk Kotlin-kode:

klasse FoodOrder privat konstruktør (val brød: streng ?, val krydder: streng ?, val kjøtt: streng ?, val fisk: streng?) {dataklasse Builder (var brød: streng? = null, var krydder: streng? = null, var kjøtt: String? = null, var fisk: String? = null) {morsomt brød (brød: String) = påfør {this.bread = brød} morsomme krydder (krydder: String) = påfør {this.condiments = krydder} moro kjøtt (kjøtt: streng) = påfør {dette. kjøtt = kjøtt} morsom fisk (fisk: streng) = påfør {dette. fisk = fisk} morsom bygg () = matbestilling (brød, krydder, kjøtt, fisk)}}

Kotlin kommer med navngitte og standardparametere som hjelper til med å minimere antall overbelastninger og forbedre lesbarheten til funksjonstilkallingen.

Vi kan også dra nytte av Kotlins dataklassestruktur som vi utforsker mer i en annen opplæring her.

Til slutt, så vel som i implementering av Java-stil, søke om() er nyttig for implementering av flytende settere.

4. Brukseksempel

Kort fortalt, la oss ta en titt på hvordan du bygger Matbestilling objekter som bruker disse Builder mønster implementeringen:

val foodOrder = FoodOrder.Builder () .brød ("hvitt brød"). kjøtt ("bacon"). krydder ("olivenolje") .bygg () 

5. Konklusjon

Byggmønsteret løser et veldig vanlig problem i den objektorienterte programmeringen av hvordan man fleksibelt kan lage et uforanderlig objekt uten å skrive mange konstruktører.

Når vi vurderer en byggherre, bør vi fokusere på om konstruksjonen er kompleks eller ikke. Hvis vi har for enkle konstruksjonsmønstre, kan innsatsen for å lage vårt fleksible byggeobjekt langt overstige fordelen.

Som alltid er koden tilgjengelig på Github.


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