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.

Chocolate.java

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

package designpatterns;

// Abstract class representing chocolate
public abstract class Chocolate {
    public abstract void taste();
}

Milka.java, Lindt.java

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

package designpatterns;

// Concrete implementation of Lindt brand chocolate
public class Lindt extends Chocolate {
    @Override
    public void taste() {
        System.out.println("Lindt: Velvety and luxurious taste");
    }
}

// Concrete implementation of Milka brand chocolate
public class Milka extends Chocolate {
    @Override
    public void taste() {
        System.out.println("Milka: Sweet and milky taste");
    }
}

ChocolateFactory.java

Ďalej sme vytvorili triedu ChocolateFactory, ktorá slúži na vytváranie inštancií čokolády na základe značky. Metóda makeChocolate(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 class for chocolate production
public class ChocolateFactory {
    public Chocolate makeChocolate(String brand) {
        if(brand.equalsIgnoreCase("Milka")) {
            return new Milka();
        }
        else if(brand.equalsIgnoreCase("Lindt")) {
            return new Lindt();
        }
        else {
            throw new IllegalArgumentException("Unknown chocolate brand: " + brand);
        }
    }
}

Main.java

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

import designpatterns.*;

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

        // Making and tasting of Milka brand chocolate
        Chocolate milka = factory.makeChocolate("Milka");
        milka.taste();

        // Making and tasting of Lindt brand chocolate
        Chocolate lindt = factory.makeChocolate("Lindt");
        lindt.taste();
    }
}

Výstup programu

factory design pattern program output
výstup príkladu Factory

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ť