Table of Contents

OMO - singleton

Singleton je objekt, u kterého chceme mít maximálně jednu instanci a chceme vytvoření nové zakázat. V každém programovacím jazyku se to dá řešit trošku jinak. V Javě je řešení přibližně následující.

  1. Konstruktor nastavíme na private, aby nešel použít. Pokud jej neuvedeme, kompilátor vytvoří implicitní, který je public.
  2. Vytvoříme si statickou proměnnou, kde tu jednu naši instanci budeme držet.
  3. Vytvoříme metodu getInstance(), která buď vrátí naši již vytvořenou instanci, nebo pokud je volána poprvé, tak instanci vytvoří (může, protože private tomu nebrání).

Logger.java

public class Logger {
    private static Logger instance;
 
    public static Logger getInstance(){
        if (instance == null){
            instance = new Logger();
        }
        return instance;
    }
 
    private Logger(){
        System.out.println("Vytvarim logger");
    }
 
    public void warning(String message){
        System.out.println("Warning:"+message);
    }
}

Main.java

public class Main {
    public static void main(String[] args) {
        Logger a = Logger.getInstance();
        Logger b = Logger.getInstance();
 
        a.warning("aaaaaa");
        b.warning("bbbbb");
 
        //Zde si overime, ze je to ta sama instance
        System.out.println(a);
        System.out.println(b);
    }
 
}