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

Dnes sa pozrieme na ďalší návrhový vzor Prototype (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 Prototype?

Design pattern Prototype je softvérový návrhový vzor, ktorý sa používa na vytváranie nových objektov kopírovaním existujúceho objektu.

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

Rieši problém vytvárania nových objektov s minimálnymi nákladmi na výpočtový čas a pamäť tým, že sa vyhneme opakovanému vytváraniu objektov pomocou konštruktora. Namiesto toho vytvoríme jednu vzorovú inštanciu (prototyp), ktorú následne môžeme skopírovať, keď potrebujeme vytvoriť nový objekt.

Tento návrhový vzor je užitočný, keď je vytváranie objektov náročné alebo ak sa získavanie nových inštancií objektu líši od jednoduchého volania konštruktora. Taktiež je užitočný pri vytváraní hlbokých kópií objektov, ktoré obsahujú zložité štruktúry dát.

Príklad Prototype design pattern implementácie v Jave

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

Tvar.java

Trieda tvar predstavuje vzor prototype, ktorá musí implementovať interface Cloneable a preťažiť metódu clone().

package designpatterns;

public class Tvar implements Cloneable {

    private String typ;

    public Tvar(String typ) {
        this.typ = typ;
    }

    public String getTyp() {
        return typ;
    }

    public void setTyp(String typ) {
        this.typ = typ;
    }

    @Override
    public Tvar clone() throws CloneNotSupportedException {
        return (Tvar) super.clone();
    }
}

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

Main.java

import designpatterns.Tvar;

public class Main {
    public static void main(String[] args) {
        // Vytvorenie vzoru
        Tvar prototype = new Tvar("Kruh");

        try {
            // Okopirovanie vzoru pre vytvorenie noveho objektu
            Tvar tvar1 = prototype.clone();
            System.out.println("Objekt 1: " + tvar1.getTyp());

            // Zmena typu noveho objektu
            tvar1.setTyp("Štvorec");
            System.out.println("Objekt 1 po zmene typu: " + tvar1.getTyp());

            // Vytvorenie dalsieho objektu okopirovanim vzoru
            Tvar tvar2 = prototype.clone();
            System.out.println("Objekt 2: " + tvar2.getTyp());
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}

V tomto príklade sme vytvorili triedu Tvar, ktorá predstavuje prototyp objektu. V metóde main sme najprv vytvorili vzorovú inštanciu prototype s typom Kruh. Následne sme skopírovali túto inštanciu a vytvorili sme objekt tvar1. Po zmenení typu tvar1 sme skopírovali vzor znova a vytvorili sme objekt tvar2.

Výstup z tohto príkladu by mal byť:

vystup java pri navrhovom vzore prototype
výstup príkladu

Pripravili sme pre teba súbory so spomínaným príkladom Prototype 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ť