Java programátor expert
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:
- Design pattern Singleton
- Design pattern Builder
- Design pattern Prototype
- Design pattern Abstract Factory
- Design pattern Adapter
Č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
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.