To ale nebude Singleton. Protože půjde furt volat konstruktor té třídy! Když chceš napsat singeton v pravém smyslu slova, tak bys musel zabezpečit to, aby mohla v celém programu existovat jen jedna instance té třídy, která má singletonem být.
Většinou se to dělá tak, že se konstruktor schová. Udělá se private. A pak se deklaruje statická metoda getInstance(), která zaručí, že vrátí vždy odkaz na stejný objekt, který si ta třída musí držet ve static fieldu. Např.:
class Singleton {
private static volatile Singleton INSTANCE = null;
// privatni konstruktor, neni videt z venku
private Singleton(){}
public static Singleton getInstance(){
if (INSTANCE == null) {
synchronized (Singleton.class) {
if (INSTANCE == null) { INSTANCE = new Singleton();}
}
}
return INSTANCE;
}
}
Tenhle příklad vytváří instanci Singleton až je opravdu potřeba. Kvůli tomu je tam zahrnut i double-check locking pattern a tím je zaručeno, že getInstance nikdy nevrátí null, ale vždy odkaz na Singleton.Uff... Idu spinkat, dobrou...