Java Builder létrehozása egy osztályhoz az IntelliJ alkalmazásban

1. Bemutatkozás

A Builder tervezési minta az egyik legszélesebb körben használt kreatív minta. Segít összetett objektumok felépítésében.

Az építők kézi megírása nehézkes és hajlamos. Ezért dedikált eszközöket kell használnunk azok automatikus generálására, amikor csak lehetséges.

Ebben az oktatóanyagban megvizsgáljuk az IntelliJ IDE-ben az építőosztályok automatikus létrehozásának különböző módjait. Megnézzük az IntelliJ beépített szolgáltatásait, valamint a harmadik féltől származó beépülő modulokat.

2. Kezdeti beállítás

Ebben a cikkben az IntelliJ IDEA közösségi kiadás 2019.1.3 változatát fogjuk használni, amely a legújabb kiadás az írás idején. A példákban bemutatott összes technikának azonban jól kell működnie az IDEA bármely más verziójával is.

Kezdjük a Könyv osztály, amelyhez létrehozunk egy építőt:

public class Könyv {private String cím; magán Szerző szerző; privát LocalDate publishDate; privát int pageCount; // szabványos kivitelező (k), mérőeszközök és beállítók}

3. Az IntelliJ beépített funkcióinak használata

Építő létrehozása a Könyv osztályban az IntelliJ beépített eszközeivel, megfelelő konstruktorra van szükségünk.

Hozzunk létre egyet:

public Book (Karakterlánc címe, Szerző szerző, LocalDate publishDate, int pageCount) {this.title = title; ez.szerző = szerző; this.publishDate = publishDate; this.pageCount = pageCount; }

Most készen állunk egy építő létrehozására. Ezért helyezzük a kurzort a létrehozott konstruktorra, és nyissuk meg a Refactor Ezt felugró ablak megnyomásával Ctrl + Alt + Shift + T (PC-n) és válassza a lehetőséget Cserélje a Konstruktort az Építőre refaktorálás:

Tovább módosíthatjuk az építő osztály néhány opcióját, például a nevét és a célcsomagot:

Ennek eredményeként létrehoztuk a BookBuilder osztály:

public class BookBuilder {private String title; magán Szerző szerző; privát LocalDate publishDate; privát int pageCount; public BookBuilder setTitle (String title) {this.title = title; adja vissza ezt; } public BookBuilder setAuthor (Szerző szerző) {this.author = szerző; adja vissza ezt; } public BookBuilder setPublishDate (LocalDate publishDate) {this.publishDate = publishDate; adja vissza ezt; } public BookBuilder setPageCount (int pageCount) {this.pageCount = pageCount; adja vissza ezt; } public Book createBook () {return new Book (cím, szerző, közzétételi dátum, oldalszám); }}

3.1. Egyéni beállítók előtagja

Általános gyakorlat az a használata val vel előtag a szetter metódusokhoz az építő osztályokban.

Az alapértelmezett előtag megváltoztatásához ki kell választanunk a A Setters Prefix átnevezése ikonra a beállítások ablakának jobb felső sarkában:

3.2. Statikus belső építő

Néhányan közülünk inkább statikus belső osztályként kívánják megvalósítani az építőket, amint azt Joshua Bloch a Hatékony Java-ban leírta.

Ebben az esetben néhány további lépést kell tennünk az IntelliJ használatával Cserélje a Konstruktort az Építőre funkció.

Először manuálisan kell létrehoznunk egy üres belső osztályt, és priváttá tenni a konstruktort:

public class Könyv {private String cím; magán Szerző szerző; privát LocalDate publishDate; privát int pageCount; public static class Builder {} privát könyv (karakterlánc címe, szerző szerző, LocalDate publishDate, int pageCount) {this.title = title; ez.szerző = szerző; this.publishDate = publishDate; this.pageCount = pageCount; } // szokásos mérőeszközök és beállítók}

Továbbá választanunk kell Használja a meglévő az opciók ablakban, és mutasson az újonnan létrehozott osztályunkra:

4. Az InnerBuilder beépülő modul használata

Most nézzük meg, hogyan tudunk létrehozni egy építőt a Könyv osztály az InnerBuilder plugin segítségével.

Miután telepítettük a bővítményt, megnyithatjuk a generál felugró ablak megnyomásával Alt + Beszúrás (PC-n) és a Építész… választási lehetőség:

Alternatív megoldásként az InnerBuilder plugint közvetlenül megnyomhatjuk Alt + Shift + B (PC-n):

Mint látjuk, néhány lehetőség közül választhatunk a létrehozott készítő testreszabására.

Lássuk az építőt, amelyet akkor állítottunk elő, amikor az összes opció nincs bejelölve:

public static final class Builder {private String title; magán Szerző szerző; privát LocalDate publishDate; privát int pageCount; public Builder () {} public Builder cím (String val) {title = val; adja vissza ezt; } public Builder szerző (szerző val) {szerző = val; adja vissza ezt; } public Builder publishDate (LocalDate val) {publishDate = val; adja vissza ezt; } public Builder pageCount (int val) {pageCount = val; adja vissza ezt; } public Book build () {return new Book (this); }}

Az InnerBuilder plugin alapértelmezés szerint statikus belső osztályként valósítja meg az építőket.

5. A Builder Generator beépülő modul használata

Végül nézzük meg, hogyan működik a Builder Generator.

Hasonlóan, mint az InnerBuilder esetében, bármelyiket megnyomhatjuk Alt + Beszúrás (PC-n) és válassza a lehetőséget Építész opció vagy használat Alt + Shift + B parancsikon.

Mint láthatjuk, három lehetőség közül választhatunk a BookBuilder:

Hagyjuk az összes lehetőséget bejelölés nélkül, és nézzük meg a létrehozott készítő osztályt:

public final class BookBuilder {private String title; magán Szerző szerző; privát LocalDate publishDate; privát int pageCount; private BookBuilder () {} public static BookBuilder aBook () {return new BookBuilder (); } public BookBuilder withTitle (String title) {this.title = title; adja vissza ezt; } public BookBuilder withAuthor (Szerző szerző) {this.author = szerző; adja vissza ezt; } public BookBuilder withPublishDate (LocalDate publishDate) {this.publishDate = publishDate; adja vissza ezt; } public BookBuilder withPageCount (int pageCount) {this.pageCount = pageCount; adja vissza ezt; } public Book build () {Book book = new Book (); könyv.setTitle (cím); könyv.setAuthor (szerző); book.setPublishDate (publishDate); book.setPageCount (pageCount); visszatérő könyv; }}

Az első lehetőség, amelyet a Builder Generator beépülő modul biztosít a létrehozott építőosztály testreszabásához - Belső építő - inkább magától értetődő.

Két másik azonban érdekesebb, és ezeket a következő szakaszokban vizsgáljuk meg.

5.1. 'de' Módszer opció

Ha ezt az opciót választjuk, a bővítmény hozzáad egy a-t de() módszer a BookBuilder osztály:

public BookBuilder, de () {visszatér egy könyvet (). withTitle (title) .withAuthor (author) .withPublishDate (publishDate) .withPageCount (pageCount); }

Most képzeljük el, hogy három könyvet szeretnénk létrehozni ugyanazzal a szerzővel és azonos oldalszámmal, de eltérő címmel és kiadási dátummal. Létrehozhatunk egy már létrehozott közös tulajdonságokkal rendelkező alapkészítőt, majd felhasználhatjuk a de() módszer új létrehozására BookBuilders (és Könyvs később) ki belőle.

Nézzünk meg egy példát:

BookBuilder commonBuilder = BookBuilder.aBook (). WithAuthor (johnDoe) .withPageCount (123); Book my_first_book = commonBuilder.but () .withPublishDate (LocalDate.of (2017, 12, 1)) .withTitle ("Első könyvem"). Build (); Book my_second_book = commonBuilder.but () .withPublishDate (LocalDate.of (2018, 12, 1)) .withTitle ("Második könyvem"). Build (); Book my_last_book = commonBuilder.but () .withPublishDate (LocalDate.of (2019, 12, 1)) .withTitle ("Utolsó könyvem"). Build ();

5.2. Használjon egyetlen mező opciót

Ha ezt a lehetőséget választjuk, a létrehozott készítő hivatkozást tartalmaz a létrehozottra Könyv objektum a könyv összes tulajdonságának helyett:

public final class BookBuilder {magánkönyv könyv; privát BookBuilder () {book = new Book (); } public static BookBuilder aBook () {return new BookBuilder (); } public BookBuilder withTitle (String title) {book.setTitle (title); adja vissza ezt; } public BookBuilder withAuthor (Szerző szerző) {book.setAuthor (szerző); adja vissza ezt; } public BookBuilder withPublishDate (LocalDate publishDate) {book.setPublishDate (publishDate); adja vissza ezt; } public BookBuilder withPageCount (int pageCount) {book.setPageCount (pageCount); adja vissza ezt; } public Book build () {return book; }}

Ez egy kicsit más megközelítés egy olyan építő osztály létrehozásához, amely bizonyos helyzetekben jól jöhet.

6. Következtetés

Ebben az oktatóanyagban különböző módszereket dolgoztunk ki az építőosztályok létrehozására az IntelliJ alkalmazásban.

Általában jobb, ha ilyen típusú eszközöket használunk az építők automatikus létrehozásához. Az általunk bemutatott lehetőségek mindegyikének megvannak az előnyei és hátrányai. Hogy melyik megközelítést választjuk valójában, az inkább ízlés és egyéni preferenciák kérdése.