Java programátor expert
Návrhové vzory Java (design patterns): Singleton
Dnes sa pozrieme na prvý návrhový vzor Singleton (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 Prototype
- Design pattern Factory
- Design pattern Abstract Factory
- Design pattern Adapter
Čo to je návrhový vzor Singleton Java?
Singleton je návrhový vzor, ktorý obmedzuje vytváranie inštancií triedy na jedinú inštanciu a poskytuje globálny prístup k tejto inštancii. Inými slovami, vzor Singleton zabezpečuje, že v Jave existuje iba jedna inštancia danej triedy a táto inštancia je ľahko prístupná odkiaľkoľvek v programe.
Aký problém návrhový vzor Singleton rieši?
Singleton design pattern je užitočný v prípade, keď potrebujete zabezpečiť, že v aplikácii existuje iba jedna inštancia danej triedy. Napríklad, môžete použiť vzor Singleton na zabezpečenie toho, že v aplikácii existuje iba jedna inštancia objektu pre pripojenie k databáze, objekt pre záznam logovania alebo objekt pre konfiguráciu. Týmto sa predchádza plytvaniu zdrojmi a zaisťuje konzistencia v aplikácii.
Príklad Singleton implementácie v Jave
Teraz si ukážeme ako implementovať vzor Singleton v Jave.
Vytvoríme si triedu, ktorú nazveme Singleton.
V singletone implementujeme privátny konštruktor, ktorý zabráni priamemu vytvoreniu inštancie.
Ďalej budeme potrebovať premennú pre samotnú inštanciu, ktorú nazveme instance. Premenná bude typu private static a inicializujeme ju na null.
Na získanie inštancie singletonu bude vždy zavolaná metóda getInstance(). Tuto vytvoríme a naprogramujeme tak, že ak inštancia ešte neexistuje, je vytvorená pri prvom volaní getInstance() a ďalšie volania getInstance() vrátia tú istú inštanciu.
Pridáme do triedy ešte public void metódu showMessage s ľubovoľným textom.
Singleton.java
package designpatterns;
public class Singleton {
// Pretoze k tejto premennej pristupujeme zo statickej metody,
// musi byt tiez staticka.
private static Singleton instance = null;
// Privatny konstruktor zabrani vytvoreniu instancie.
private Singleton() {
}
// Pre pristup k instancii budeme pouzivat tuto metodu.
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
// Metoda na verifikovanie volania metody na instancii.
public void showMessage() {
System.out.println("You have implemented design pattern Singleton.");
}
}
Tu je príklad použitia triedy Singleton:
Main.java
import designpatterns.Singleton;
public class Main {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
singleton.showMessage();
}
}
Tento kód vypíše správu „You have implemented design pattern Singleton.“, pretože showMessage() je volaná na inštancii singletonu.
Pripravili sme pre teba súbory so spomínaným príkladom kódu Java Singleton, ktorý si môžeš spustiť priamo v Jave. Stiahni si kód tu.