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:

Č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.

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ť