Izrada Java Builder-a za klasu u IntelliJ-u

1. Uvod

Uzorak dizajna Builder jedan je od najčešće korištenih kreativnih uzoraka. Pomaže nam u konstrukciji složenih predmeta.

Ručno pisanje graditelja nezgrapno je i sklono pogreškama. Stoga bismo trebali koristiti namjenske alate za automatsko generiranje kad god je to moguće.

U ovom uputstvu istražit ćemo različite načine za automatsko stvaranje klasa graditelja u IntelliJ IDE-u. Pregledat ćemo ugrađene značajke koje IntelliJ pruža odmah, kao i dodatke nezavisnih proizvođača.

2. Početno postavljanje

Kroz ovaj ćemo članak koristiti verziju 2019.1.3 izdanja IntelliJ IDEA Community, koja je najnovije izdanje u vrijeme pisanja ovog članka. Međutim, sve tehnike predstavljene u primjerima trebale bi dobro funkcionirati i s bilo kojom drugom verzijom IDEA-e.

Počnimo s definiranjem Knjiga klasa za koju ćemo generirati graditelj:

knjiga javnog razreda {naslov privatnog niza; privatni Autor autor; privatni lokalni datum objavljivanja datum; private int pageCount; // standardni konstruktori, getteri i postavljači}

3. Korištenje ugrađene funkcionalnosti IntelliJ-a

Za generiranje graditelja za Knjiga klase pomoću ugrađenih alata IntelliJ, potreban nam je odgovarajući konstruktor.

Stvorimo jedan:

javna knjiga (naslov niza, autor autora, LocalDate objaviti datum, int pageCount) {this.title = naslov; this.author = autor; this.publishDate = datum objave; this.pageCount = pageCount; }

Sada smo spremni stvoriti graditelj. Stoga, postavimo kursor na stvoreni konstruktor i otvorimo Refaktor ovo skočni prozor pritiskom na Ctrl + Alt + Shift + T (na računalu) i odaberite Zamijenite konstruktor sa Builder refaktoriranje:

Možemo dalje prilagoditi neke opcije za klasu graditelja, poput naziva i ciljnog paketa:

Kao rezultat toga generirali smo BookBuilder razred:

public class BookBuilder {naslov privatnog niza; privatni Autor autor; privatni lokalni datum objavljivanja datum; private int pageCount; javni BookBuilder setTitle (naslov niza) {this.title = title; vrati ovo; } javni BookBuilder setAuthor (autor autora) {this.author = author; vrati ovo; } javni BookBuilder setPublishDate (LocalDate objaviti datum) {this.publishDate = objaviti datum; vrati ovo; } javni BookBuilder setPageCount (int pageCount) {this.pageCount = pageCount; vrati ovo; } javna knjiga createBook () {vratiti novu knjigu (naslov, autor, datum objave, broj stranice); }}

3.1. Prefiks prilagođenih postavljača

Uobičajena je praksa koristiti a s prefiks za metode postavljača u klasama graditelja.

Da bismo promijenili zadani prefiks, moramo odabrati Preimenuj prefiks postavljača u gornjem desnom kutu prozora s opcijama:

3.2. Statički unutarnji graditelj

Neki od nas možda više vole implementirati graditelje kao statičke unutarnje klase kako ih je opisao Joshua Bloch u Effective Java.

Ako je to slučaj, trebamo poduzeti nekoliko dodatnih koraka da to postignemo pomoću IntelliJ-ovih Zamijenite konstruktor sa Builder značajka.

Prije svega, moramo ručno stvoriti praznu unutarnju klasu i konstruktor učiniti privatnim:

knjiga javnog razreda {naslov privatnog niza; privatni autor autor; privatni lokalni datum objavljivanja datum; private int pageCount; javni statički graditelj klasa {} privatna knjiga (naslov niza, autor autora, LocalDate objaviti datum, int pageCount) {this.title = naslov; this.author = autor; this.publishDate = datum objave; this.pageCount = pageCount; } // standardni getteri i postavljači}

Nadalje, moramo odabrati Koristite postojeće u prozoru opcija i pokažite na našu novostvorenu klasu:

4. Korištenje dodatka InnerBuilder

Pogledajmo sada kako možemo generirati graditelj za Knjiga klasa pomoću dodatka InnerBuilder.

Nakon što instaliramo dodatak, možemo otvoriti Generirati skočni prozor pritiskom na Alt + Umetni (na PC-u) i odabir Graditelj… opcija:

Alternativno, dodatak InnerBuilder možemo nazvati izravno pritiskom na Alt + Shift + B (na računalu):

Kao što vidimo, možemo odabrati nekoliko opcija za prilagodbu generiranog graditelja.

Pogledajmo graditelja koji se generira kad se ne potvrde sve opcije:

javni statički završni graditelj klase {naslov privatnog niza; privatni Autor autor; privatni lokalni datum objavljivanja datum; private int pageCount; javni graditelj () {} naslov javnog graditelja (niz val) {naslov = val; vrati ovo; } javni graditelj autor (Autor val) {autor = val; vrati ovo; } javni graditelj objaviti datum (LocalDate val) {objaviti datum = val; vrati ovo; } javni graditelj straniceCount (int val) {pageCount = val; vrati ovo; } public Book build () {return new Book (this); }}

Dodatak InnerBuilder prema zadanim postavkama implementira graditelje kao statičke unutarnje klase.

5. Korištenje dodatka Builder Generator

Napokon, pogledajmo kako djeluje Builder Generator.

Slično tome, kao i za InnerBuilder, možemo pritisnuti Alt + Umetni (na računalu) i odaberite Graditelj opcija ili upotreba Alt + Shift + B prečac.

Kao što vidimo, imamo tri mogućnosti za odabir za prilagodbu BookBuilder:

Ostavimo sve opcije neoznačene i pogledajte generiranu graditeljsku klasu:

javni završni razred BookBuilder {naslov privatnog niza; privatni Autor autor; privatni lokalni datum objavljivanja datum; private int pageCount; private BookBuilder () {} javni statični BookBuilder aBook () {return new BookBuilder (); } javni BookBuilder withTitle (naslov niza) {this.title = title; vrati ovo; } javni BookBuilder withAuthor (autor autora) {this.author = author; vrati ovo; } javni BookBuilder sPublishDate (LocalDate objaviti datum) {this.publishDate = objaviti datum; vrati ovo; } javni BookBuilder withPageCount (int pageCount) {this.pageCount = pageCount; vrati ovo; } public Book build () {Book book = nova knjiga (); book.setTitle (naslov); book.setAuthor (autor); book.setPublishDate (objavitiDatum); book.setPageCount (pageCount); knjiga povratka; }}

Prva opcija koju dodatak Builder Generator nudi za prilagodbu stvorene graditeljske klase - Unutarnji graditelj - je prilično objašnjenje samo po sebi.

Još su dvije zanimljivije, a mi ćemo ih istražiti u sljedećim odjeljcima.

5.1. 'ali' Opcija metode

Ako odaberemo ovu opciju, dodatak će dodati a ali() metoda za BookBuilder razred:

javni BookBuilder but () {return aBook (). withTitle (naslov) .withAuthor (autor) .withPublishDate (objavaDate) .withPageCount (pageCount); }

Zamislimo sada da želimo stvoriti tri knjige s istim autorom i jednakim brojem stranica, ali s različitim naslovima i objaviti datume. Možemo stvoriti graditelj baze sa zajedničkim svojstvima koja su već postavljena, a zatim koristiti ali() metoda za stvaranje novih BookBuilders (i Knjigas kasnije) iz nje.

Pogledajmo primjer:

BookBuilder commonBuilder = BookBuilder.aBook (). WithAuthor (johnDoe) .withPageCount (123); Rezervirajte my_first_book = commonBuilder.but () .withPublishDate (LocalDate.of (2017, 12, 1)) .withTitle ("Moja prva knjiga"). Build (); Rezervirajte my_second_book = commonBuilder.but () .withPublishDate (LocalDate.of (2018, 12, 1)) .withTitle ("Moja druga knjiga"). Build (); Rezervirajte my_last_book = commonBuilder.but () .withPublishDate (LocalDate.of (2019, 12, 1)) .withTitle ("Moja zadnja knjiga"). Build ();

5.2. Upotrijebite opciju s jednim poljem

Ako odaberemo ovu opciju, generirani graditelj će sadržavati referencu na stvoreno Knjiga objekt umjesto svih svojstava knjige:

javni završni razred BookBuilder {privatna knjiga knjiga; private BookBuilder () {book = nova knjiga (); } javni statični BookBuilder aBook () {vratiti novi BookBuilder (); } javni BookBuilder withTitle (naslov niza) {book.setTitle (naslov); vrati ovo; } javni BookBuilder withAuthor (autor autora) {book.setAuthor (autor); vrati ovo; } javni BookBuilder sPublishDate (LocalDate objaviti datum) {book.setPublishDate (objavitiDatum); vrati ovo; } javni BookBuilder withPageCount (int pageCount) {book.setPageCount (pageCount); vrati ovo; } public Book build () {povratak knjige; }}

Ovo je malo drugačiji pristup stvaranju graditeljske klase koja bi vam mogla dobro doći u određenim situacijama.

6. Zaključak

U ovom uputstvu istražili smo različite načine generiranja graditeljskih klasa u IntelliJ-u.

Obično je bolje koristiti ove alate za automatsko generiranje naših graditelja. Svaka od opcija koje smo predstavili ima svoje prednosti i nedostatke. Koji ćemo pristup zapravo odabrati, prije je stvar ukusa i individualnih preferencija.


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