Project Technical Lead
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:
- Design pattern Builder
- Design pattern Singleton
- Design pattern Factory
- Design pattern Abstract Factory
- Design pattern Adapter
Č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ť:
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.