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

V tomto článku sa pozrieme na ďalší návrhový vzor Factory (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 Factory?

Design pattern Factory je softvérový návrhový vzor, ktorého hlavným cieľom je jednoduchý a flexibilný spôsob vytvorenia inštancií tried bez toho, aby sme museli priamo špecifikovať konkrétne triedy v klientskom kóde.

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

Ak máme triedy, ktoré implementujú spoločné rozhranie alebo sú z nich odvodené, chceme mať možnosť vytvárať inštancie týchto tried bez toho, aby sme museli priamo spomenúť konkrétnu triedu. To je užitočné v prípade, ak nechceme, aby sa klientsky kód viazal na konkrétnu implementáciu, ale chceme získať objekt na základe niektorého parametra alebo podmienky.

Príklad Factory implementácie v Jave

Teraz si ukážeme ako implementovať vzor Factory v Jave. Tento príklad ilustruje, ako vzor Factory umožňuje vytvárať rôzne typy objektov (čokolády) pomocou jednej factory triedy bez potreby priamo špecifikovať konkrétne triedy v klientskom kóde.

Cokolada.java

V tomto príklade sme vytvorili abstraktnú triedu Cokolada, ktorá reprezentuje čokoládu.

package designpatterns;

// Abstraktna trieda reprezentujuca cokoladu
public abstract class Cokolada {
     public abstract void ochutnat ();
}

Milka.java, Lindt.java

Potom sme implementovali dve konkrétne triedy Milka a Lindt, ktoré rozširujú abstraktnú triedu Cokolada. Každá z týchto tried definuje svoju vlastnú implementáciu metódy ochutnat().

package designpatterns;

// Konkretna implementacia cokolady znacky Milka
public abstract class Milka extends Cokolada { 
       @Override
       public void ochutnat ()   { 
                 system.out.println("Milka: Sladká a mliečna chut");
       }
}

// Konkretna implementacia cokolady znacky Lindt
public abstract class Lindt extends Cokolada { 
       @Override
       public void ochutnat ()   { 
                 system.out.println("Lindt: Jemná a luxusná chut");
       }
}

CokoladaFactory.java

Ďalej sme vytvorili triedu CokoladaFactory, ktorá slúži na vytváranie inštancií čokolády na základe značky. Metóda vytvorCokoladu(String znacka) vytvára čokoládu podľa zadaného parametra znacka. Ak je značka Milka, vytvorí sa inštancia triedy Milka, ak je značka Lindt, vytvorí sa inštancia triedy Lindt. Ak je zadaná neznáma značka, vyhodí sa výnimka IllegalArgumentException.

package designpatterns;

// Factory trieda pre vyrobu cokolady
public class CokoladaFactory {
    public Cokolada vytvorCokoladu(String znacka) {
        if(znacka.equalsIgnoreCase("Milka")) {
            return new Milka();
        }
        else if(znacka.equalsIgnoreCase("Lindt")) {
            return new Lindt();
        }
        else {
            throw new IllegalArgumentException("Neznáma 
                značka čokolády: " + znacka);
        }
    }
}

Main.java

V klientskom kóde sme vytvorili inštanciu CokoladaFactory, a pomocou nej sme vytvorili a ochutnali čokoládu značky Milka a Lindt.

import designpatterns.*;

// Pouzitie
public class Main {
    public static void main(String[] args) {
        CokoladaFactory factory = new CokoladaFactory();

        // Vytvorenie a ochutnanie cokolady znacky Milka
        Cokolada milka = factory.vytvorCokoladu("Milka");
        milka.ochutnat();

        // Vytvorenie a ochutnanie cokolady znacky Lindt
        Cokolada lindt = factory.vytvorCokoladu("Lindt");
        lindt.ochutnat();
    }
}

Výstup programu
Výstup programu

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

Ak si Java programátor a hľadáš prácu, prečítaj si viac o plate programátora a pozri si naše najnovšie pracovné ponuky.

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ť