Jelenlegi hely

25.1.1 Egyke (Singleton)

Az Egyke minta akkor hasznos, ha egy osztályból csak egyetlen példány létrehozását szeretnénk engedélyezni. A módszer lényege, hogy kontrolláljuk a példányosítást egy privát konstruktor létrehozásával. Az osztályból csak egyetlen példányt hozunk létre, azt is csak szükség (az első kérés) esetén. A példány elérése egy statikus gyártó metóduson keresztül történik.

Nézzünk először egy általános példát:

class Singleton {
  private static Singleton instance = null;
  private Singleton() { }
  static public Singleton instance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
  public void finalize() {
    instance = null;
  }
}

Példányt létrehozni a következő módon tudunk:

Singleton one = Singleton.instance();

Ha egy újabb példányt kérünk, akkor is ugyanazt az objektumot kapjuk. Hibás lenne viszont, ha közvetlenül próbálnánk példányosítani:

Singleton one = new Singleton(); // hibás

Egy kicsit más megoldást láthatunk egy távoli kapcsolat kiépítését megvalósító osztálynál. Itt a kapcsolat mindig szükséges, a duplikálás elkerülése a fő célunk.

Megjegyzés: Érdemes belegondolni, milyen zavarokkal járna, ha a programozó figyelmetlensége miatt egyszerre két vagy több távoli kapcsolatot próbálnánk kiépíteni és használni ugyanazon erőforrás felé.

final class RemoteConnection {
  private Connect con;
  private static RemoteConnection rc =
      new RemoteConnection(connection);
  private RemoteConnection(Connect c) {
    con = c;
    ....
  }
  public static RemoteConnection getRemoteConnection() {
    return rc;
  }
  public void setConnection(Connect c) {
    this(c);
  }
}

Szerzői megjegyzés: További minták bemutatása tervben van.