Návrhové vzory Java (design patterns): Builder

Dnes sa pozrieme na ďalší návrhový vzor Builder (java design patterns) z kategórie vzorov určených na vytváranie objektov (creational patterns).

Prečítaj si o ďalších design patterns – seriál návrhových vzorov:

Čo to je návrhový vzor Builder?

Design pattern Builder je softvérový návrhový vzor, ktorý sa používa na zjednodušenie konštrukcie zložitých objektov a to tak, že sa rozbije na sadu krokov.

Aký problém návrhový vzor Builder rieši?

Rieši problém vytvárania objektov s veľkým množstvom parametrov alebo voliteľných vlastností. Namiesto toho, aby sme mali konštruktory s dlhým zoznamom parametrov, vzor Builder nám umožňuje vytvárať objekty pomocou prehľadných krokov.

Pattern Builder funguje tak, že máme oddelenú triedu, ktorá sa nazýva Builder, zodpovednú za postupné vytváranie objektu. Táto trieda poskytuje metódy na nastavenie jednotlivých vlastností objektu. Nakoniec, keď sú všetky vlastnosti nastavené, môžeme pomocou metódy build() vytvoriť samotný objekt.

Príklad Builder implementácie v Jave

Teraz si ukážeme ako implementovať vzor Builder v Jave.

Produkt.java

V tomto príklade sme vytvorili triedu Produkt, ktorá reprezentuje produkt. Trieda Produkt má privátny konštruktor a vnorenú triedu Builder, ktorá postupne nastavuje vlastnosti objektu.

Použitím metód setNazov, setPopis a setCena môžeme nastaviť jednotlivé vlastnosti. Nakoniec voláme metódu build(), ktorá vytvorí objekt typu Produkt. Potom môžeme použiť vytvorený objekt a získať jeho vlastnosti.

package designpatterns;

public class Produkt {
    private String nazov;
    private String popis;
    private double cena;

    // Privatny konstruktor, aby sme zabranili priamemu vytvoreniu objektu
    private Produkt(Builder builder) {
        this.nazov = builder.nazov;
        this.popis = builder.popis;
        this.cena = builder.cena;
    }

    // Gettery pre vlastnosti objektu (nazov, popis, cena)
    public String getNazov() {
        return nazov;
    }

    public String getPopis() {
        return popis;
    }

    public double getCena() {
        return cena;
    }

    // Navrhovy vzor Builder
    public static class Builder {
        private String nazov;
        private String popis;
        private double cena;

        public Builder() {
        // Predvolene hodnoty,
        // alebo mozeme vynechat konstruktor a inicializovat hodnoty v setteroch
            this.nazov = "";
            this.popis = "";
            this.cena = 0.0;
        }

        public Builder setNazov(String nazov) {
            this.nazov = nazov;
            return this;
        }

        public Builder setPopis(String popis) {
            this.popis = popis;
            return this;
        }

        public Builder setCena(double cena) {
            this.cena = cena;
            return this;
        }

        public Produkt build() {
            return new Produkt(this);
        }
    }
}

Tu je príklad použitia triedy Produkt s implementovaním návrhovým vzorom Builder:

Main.java

V tomto príklade sme použili Builder vzor na vytvorenie objektu typu Produkt, ale tento vzor je použiteľný pre akýkoľvek objekt, ktorý má komplikovanejšie nastavovanie svojich vlastností.

import designpatterns.Produkt;

// Pouzitie
public class Main {
    public static void main(String[] args) {
        Produkt produkt = new Produkt.Builder()
                .setNazov("Japonský čaj Gyokuro")
                .setPopis("Kvalitný tienený japonský zelený čaj")
                .setCena(29.99)
                .build();

        // Pouzitie vytvoreneho objektu produkt
        System.out.println("Názov: " + produkt.getNazov());
        System.out.println("Popis: " + produkt.getPopis());
        System.out.println("Cena: " + produkt.getCena());
    }
}
Výstup programu
Výstup programu

Pripravili sme pre teba súbory so spomínaným príkladom Java Builder vo forme kódu, ktorý si môžeš spustiť priamo v Jave. Stiahni si kód tu.

O autorovi

Jozef Wagner

Java Developer Senior

Viac ako 10 rokov programujem v Jave, momentálne pracujem v msg life Slovakia ako Java programátor senior a pomáham zákazníkom implementovať ich požiadavky do poistného softvéru Life Factory. Vo voľnom čase si rád oddýchnem v lese, prípadne si zahrám nejakú dobrú počítačovú hru.

Daj nám o sebe vedieť