Vytvorenie Java Builderu pre triedu v IntelliJ
1. Úvod
Dizajnový vzor Builder je jedným z najbežnejšie používaných tvorivých vzorov. Pomáha nám konštruovať zložité objekty.
Ručné písanie staviteľov je ťažkopádne a náchylné na chyby. Preto by sme mali používať vyhradené nástroje na ich automatické generovanie, kedykoľvek je to možné.
V tomto tutoriáli preskúmame rôzne spôsoby automatického vytvárania tried zostavovača v IntelliJ IDE. Pozrime sa na vstavané funkcie, ktoré IntelliJ poskytuje po vybalení, ako aj na doplnky tretích strán.
2. Počiatočné nastavenie
V tomto článku budeme používať verziu 2019.1.3 vydania IntelliJ IDEA Community, ktorá je v čase písania článku najnovšou verziou. Všetky techniky uvedené v príkladoch by však mali fungovať dobre aj v prípade akejkoľvek inej verzie IDEA.
Začnime definovaním Kniha trieda, pre ktorú vygenerujeme staviteľ:
public class Book {private String title; súkromný autor autor; private LocalDate publishDate; private int pageCount; // štandardné konštruktory, getre a setre}
3. Používanie vstavanej funkcie IntelliJ
Generovať staviteľa pre Kniha triedy pomocou zabudovaných nástrojov IntelliJ potrebujeme vhodný konštruktor.
Vytvorme si jeden:
verejná kniha (názov reťazca, autor, autor, LocalDate publishDate, int pageCount) {this.title = názov; this.author = autor; this.publishDate = publishDate; this.pageCount = pageCount; }
Teraz sme pripravení vytvoriť nástroj na tvorbu. Preto umiestnime kurzor na vytvoreného konštruktora a otvorme Refaktor to vyskakovacie okno stlačením Ctrl + Alt + Shift + T (na PC) a vyberte Vymeňte konštruktor za Builder refaktoring:
Ďalej môžeme upraviť niektoré z možností triedy staviteľov, napríklad jej názov a cieľový balík:
Vo výsledku sme vygenerovali BookBuilder trieda:
public class BookBuilder {private String title; súkromný autor autor; private LocalDate publishDate; private int pageCount; public BookBuilder setTitle (názov reťazca) {this.title = názov; vráťte to; } public BookBuilder setAuthor (autor autor) {this.author = autor; vráťte to; } public BookBuilder setPublishDate (LocalDate publishDate) {this.publishDate = publishDate; vráťte to; } public BookBuilder setPageCount (int pageCount) {this.pageCount = pageCount; vráťte to; } public Book createBook () {return new Book (title, author, publishDate, pageCount); }}
3.1. Predpona vlastných nastavovačov
Je bežnou praxou používať a s predpona pre nastavovacie metódy v triedach stavačov.
Ak chcete zmeniť predvolenú predponu, musíme zvoliť Premenovať predponu Setters ikona v pravom hornom rohu okna možností:
3.2. Static Inner Builder
Niektorí z nás môžu uprednostniť implementáciu stavačov ako statických vnútorných tried, ako ich popísal Joshua Bloch v dokumente Effective Java.
Ak je to tak, musíme urobiť niekoľko ďalších krokov, aby sme to dosiahli pomocou IntelliJ Vymeňte konštruktor za Builder vlastnosť.
Najskôr musíme manuálne vytvoriť prázdnu vnútornú triedu a urobiť konštruktor súkromným:
public class Book {private String title; súkromný autor autor; private LocalDate publishDate; private int pageCount; public static class Builder {} private Book (názov reťazca, autor, autor, LocalDate publishDate, int pageCount) {this.title = title; this.author = autor; this.publishDate = publishDate; this.pageCount = pageCount; } // štandardní zakladatelia a zakladatelia}
Ďalej si musíme vybrať Použiť existujúce v okne možností a ukážte na našu novo vytvorenú triedu:
4. Používanie doplnku InnerBuilder
Pozrime sa teraz, ako môžeme vygenerovať program na vytváranie súborov Kniha triedy pomocou doplnku InnerBuilder.
Po nainštalovaní doplnku môžeme otvoriť Generovať vyskakovacie okno stlačením Alt + Vložiť (na PC) a výber Staviteľ… možnosť:
Prípadne môžeme zavolať plugin InnerBuilder priamo stlačením Alt + Shift + B (na PC):
Ako vidíme, na prispôsobenie vygenerovaného nástroja na zostavenie si môžeme vybrať z niekoľkých možností.
Pozrime sa, ako sa generuje tvorca, keď nie sú začiarknuté všetky možnosti:
public static final class Builder {private String title; súkromný autor autor; private LocalDate publishDate; private int pageCount; public Builder () {} public builder title (String val) {title = val; vráťte to; } public Builder autor (Author val) {author = val; vráťte to; } public Builder publishDate (LocalDate val) {publishDate = val; vráťte to; } public Builder pageCount (int val) {pageCount = val; vráťte to; } public Book build () {return new Book (this); }}
Doplnok InnerBuilder implicitne implementuje stavače ako statické vnútorné triedy.
5. Používanie doplnku Builder Generator
Na záver sa pozrime, ako funguje Builder Generator.
Podobne ako v prípade InnerBuilder, môžeme buď stlačiť Alt + Vložiť (na PC) a vyberte Staviteľ možnosť alebo použitie Alt + Shift + B skratka.
Ako vidíme, máme na výber tri možnosti prispôsobenia BookBuilder:
Nechajme všetky možnosti nezaškrtnuté a pozrieme si vygenerovanú triedu builderov:
public final class BookBuilder {private String title; súkromný autor autor; private LocalDate publishDate; private int pageCount; private BookBuilder () {} public static BookBuilder aBook () {return new BookBuilder (); } public BookBuilder withTitle (názov reťazca) {this.title = názov; vráťte to; } public BookBuilder withAuthor (autor autor) {this.author = autor; vráťte to; } public BookBuilder withPublishDate (LocalDate publishDate) {this.publishDate = publishDate; vráťte to; } public BookBuilder withPageCount (int pageCount) {this.pageCount = pageCount; vráťte to; } public Book build () {Book book = new Book (); book.setTitle (názov); book.setAuthor (autor); book.setPublishDate (publishDate); book.setPageCount (pageCount); spiatočná kniha; }}
Prvá možnosť, ktorú poskytuje doplnok Builder Generator, na prispôsobenie vytvorenej triedy staviteľa - Vnútorný staviteľ - je skôr samozrejmý.
Dve ďalšie sú však zaujímavejšie a my ich preskúmame v nasledujúcich častiach.
5.1. 'ale' Metóda Možnosť
Ak zvolíme túto možnosť, doplnok pridá a ale() metóda do BookBuilder trieda:
public BookBuilder but () {return aBook (). withTitle (title) .withAuthor (author) .withPublishDate (publishDate) .withPageCount (pageCount); }
Teraz si predstavme, že chceme vytvoriť tri knihy s rovnakým autorom a rovnakým počtom strán, ale s rôznymi názvami a dátumami vydania. Môžeme vytvoriť základný builder s už nastavenými spoločnými vlastnosťami a potom použiť ale() metóda na vytvorenie nového BookBuilders (a Knihas neskôr) z toho.
Pozrime sa na príklad:
BookBuilder commonBuilder = BookBuilder.aBook (). WithAuthor (johnDoe) .withPageCount (123); Kniha my_first_book = commonBuilder.but () .withPublishDate (LocalDate.of (2017, 12, 1)) .withTitle ("Moja prvá kniha"). Build (); Book my_second_book = commonBuilder.but () .withPublishDate (LocalDate.of (2018, 12, 1)) .withTitle ("Moja druhá kniha"). Build (); Book my_last_book = commonBuilder.but () .withPublishDate (LocalDate.of (2019, 12, 1)) .withTitle ("My Last Book"). Build ();
5.2. Použite možnosť jedného poľa
Ak zvolíme túto možnosť, vygenerovaný tvorca bude mať odkaz na vytvorené Kniha objekt namiesto všetkých vlastností knihy:
verejná posledná trieda BookBuilder {súkromná kniha kníh; private BookBuilder () {book = new Book (); } public static BookBuilder aBook () {return new BookBuilder (); } public BookBuilder withTitle (názov reťazca) {book.setTitle (názov); vráťte to; } public BookBuilder withAuthor (autor autor) {book.setAuthor (autor); vráťte to; } public BookBuilder withPublishDate (LocalDate publishDate) {book.setPublishDate (publishDate); vráťte to; } verejný BookBuilder withPageCount (int pageCount) {book.setPageCount (pageCount); vráťte to; } public Book build () {návratová kniha; }}
Toto je trochu odlišný prístup k vytvoreniu triedy staviteľov, ktorá by sa v určitých situáciách mohla hodiť.
6. Záver
V tomto tutoriáli sme preskúmali rôzne spôsoby generovania tried staviteľa v IntelliJ.
Spravidla je lepšie používať tieto druhy nástrojov na automatické generovanie našich staviteľov. Každá z ponúkaných možností má svoje klady a zápory. Ktorý prístup vlastne zvolíme, je skôr vecou vkusu a individuálnych preferencií.