Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Delphi - nastavenie statických premenných v triede

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

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny