všetky vzory

Singleton

Zaručí, že trieda má najviac jednu instanciu, a dá k nej globálny prístup.

class Config {  static #instance = null;   static getInstance() {    if (Config.#instance === null) {      Config.#instance = new Config();    }    return Config.#instance;  }} const a = Config.getInstance();const b = Config.getInstance();console.log(a === b); // true

Celý priebeh v texte (10 krokov)
  1. Config má v statickom kontexte miesto pre jedinú instanciu. Zatiaľ je prázdne.
  2. ClientA si prvýkrát vyžiada instanciu cez getInstance().
  3. Pole je null, takže objekt práve teraz vzniká — priamo v triede. Jediný raz za život programu.
  4. Von neputuje objekt, ale referencia na neho. Lanko drží, kam ukazuje.
  5. ClientB žiada to isté.
  6. Pole už nie je null. Podmienka neplatí, žiadny new sa nespustí — v statickom poli zostáva tá istá gulička.
  7. ClientB dostane referenciu na tú istú guličku.
  8. ClientC žiada instanciu.
  9. Tretia referencia. Objekt je stále jeden.
  10. Jedna gulička v statickom poli, tri lanká do nej. Presne preto platí a === b === c.

Kedy použiť

  • Stav musí byť v celej aplikácii rovnaký — konfigurácia, cache, pool spojení.
  • Vytvorenie objektu je drahé a opakovať ho nemá zmysel.
  • Nad tým, kto a kedy objekt vytvorí, treba prísnu kontrolu.

Pasce

  • Skryje závislosť — trieda, ktorá si ho zavolá vnútri, o ňom v konštruktore mlčí.
  • Zdieľaný mutovateľný stav je globálna premenná v obleku.
  • Instancia žije medzi testami, takže na výsledku začne záležať ich poradie.
  • Naivná kontrola na null je vo viacvláknovom prostredí súbeh — v JavaScripte nie, v Jave áno.