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.

Product.java

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

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

package designpatterns;

public class Product {
    private String title;
    private String description;
    private double price;

    // Private constructor to prevent instantiation of the object
    private Product(Builder builder) {
        this.title = builder.title;
        this.description = builder.description;
        this.price = builder.price;
    }

    // Getters for object attributes (title, description, price)
    public String getTitle() {
        return title;
    }

    public String getDescription() {
        return description;
    }

    public double getPrice() {
        return price;
    }

    // Design Pattern Builder
    public static class Builder {
        private String title;
        private String description;
        private double price;

        public Builder() {
            // Default values, or we can omit the constructor and initialize values in setters
            this.title = "";
            this.description = "";
            this.price = 0.0;
        }

        public Builder setTitle(String title) {
            this.title = title;
            return this;
        }

        public Builder setDescription(String description) {
            this.description = description;
            return this;
        }

        public Builder setPrice(double price) {
            this.price = price;
            return this;
        }

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

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

Main.java

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

import designpatterns.Product;

// Example
public class Main {
    public static void main(String[] args) {
        Product produkt = new Product.Builder()
                .setTitle("Japanese tea Gyokuro")
                .setDescription("Quality shaded Japanese green tea")
                .setPrice(29.99)
                .build();
        
        System.out.println("Title: " + produkt.getTitle());
        System.out.println("Description: " + produkt.getDescription());
        System.out.println("Price: " + produkt.getPrice());
    }
}

Výstup príkladu

builder design pattern program output
výstup príkladu Builder

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ť