Singleton-Implementation

Status
Nicht offen für weitere Antworten.

prolahmierer

Mitglied
Hallo,

bisher haben meine Singleton Klassen immer eine private Variable
Java:
 private static X instance = new X();

und eine getInstance () Funktion:

    public static DBAdmin getInstance() {
	return instance;
    }

Wenn ich jetzt ein Interface implementiere, dass die Methode getInstance() verspricht darf die Methode nicht mehr static sein. Hat das irgendwelche Einflüsse auf irgendwas? (Multithreading, etc.) ?
 
Zuletzt bearbeitet von einem Moderator:
M

maki

Gast
Wenn ich jetzt ein Interface implementiere, dass die Methode getInstance() verspricht darf die Methode nicht mehr static sein.
Ja, es ist kein S. mehr ;)

Um Objektmethoden aufzurufen, braucht du ein Objekt, aber nach diesem Muster kannst du keines erstellen, nur die Klasse selbst.

S. und Interface beissen sich in Java, ist aber nicht weiter schlimm, S. sollten sowieso vermieden werden.
 

Landei

Top Contributor
Was du willst, geht nicht. static Methoden werden nicht wirklich vererbt, und Interfaces können deshalb keine statischen Methoden enthalten. Das ist ein wichtiger Punkt, der gegen Singletons spricht, und zu Ideen wie Dependency Injection geführt hat.

Schreibe eine "normale" Klasse gegen ein Interface, und gib sie allen anderen Klassen, die sie brauchen, mit.
Java:
interface FooProvider {
  public Foo getFoo();
}

class FooProviderImpl extends FooProvider {
  public Foo getFoo() { return new Foo(); }
}

class NeedsFoo {
  private final FooProvider fooProvider;
  public NeedsFoo(FooProvider fooProvider) {
     this.fooProvider = fooProvider
  }
}

//an einer einzigen, zentralen Stelle im Programm:
FooProvider fooProviderInstance = new FooProviderImpl(); 

NeedsFoo needsFoo = new NeedsFoo(fooProviderInstance);

Wird das zu aufwendig, schau dir das Factory-Pattern oder eben Dependency Injection (z.B. Google Guice) an.
 
S

Spacerat

Gast
Genau so muss es sein. Singletons haben eine statische private Konstante einer Instanz der eigenen Klasse und eine öffentliche statische Methode, mit welcher diese Instanz besorgt werden kann. Singletons sind von Natur aus finale Klassen und als solche zu deklarieren. Singletons haben einen privaten parameterlosen Konstruktor. Singletons dürfen Interfaces implementieren. Über die Methoden dieses Interfaces sollten aber keine anderen Instanzen dieses Interfaces erreichbar sein. Ein Musterbeispiel liefert z.B. die Implementation diverser Server-Dienste. Das Interface heisst also "Dienst". Dienste können gestartet und gestoppt werden.
Java:
public interface Dienst
{
  boolean start();
  boolean stop();
}
Konkrete Dienste könnten z.B. HTTPDaemon und FTPDaemon heissen
Java:
public final class HTTPDaemon
implements Dienst
{
  private final static HTTPDaemon instance;

  static
  {
    // So wird die Instanz beim Initialisieren der Klasse
    // statt beim ersten Aufruf von "getInstance()"
    // instanziert.
    instance = new HTTPDaemon();
  }

  private HTTPDaemon()
  {
    // ...
  }

  public static HTTPDaemon getInstance()
  {
    return instance;
  }

  public boolean start()
  {
    // ...
    return started;
  }


  public boolean stop()
  {
    // ...
    return stopped;
  }

  // ...
}

public final class FTPDaemon
implements Dienst
{
  private final static FTPDaemon instance;

  static
  {
    // So wird die Instanz beim Initialisieren der Klasse
    // statt beim ersten Aufruf von "getInstance()"
    // instanziert.
    instance = new FTPDaemon();
  }

  private FTPDaemon()
  {
    // ...
  }

  public static FTPDaemon getInstance()
  {
    return instance;
  }

  public boolean start()
  {
    // ...
    return started;
  }


  public boolean stop()
  {
    // ...
    return stopped;
  }

  // ...
}
@maki: ...gottogottogott... was hab' isch denn da angerichtet... :D
 

Landei

Top Contributor
@SpaceRat: Die "halboffizielle" Empfehlung von Sun ist inzwischen, enums für Singletons zu benutzen. Vorteile: Der Code ist kürzer, man kann nix vergessen und selbst über Serialisierung bekommt man keine "doppelten" Singletons.

Java:
enum Singleton {
   INSTANCE;
   //alle gewünschten Methoden
}
 
S

Spacerat

Gast
@Landei: Das nenn' ich mal 'ne Empfehlung... :applaus:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
W Sinn eines Singleton ? Java Basics - Anfänger-Themen 14
O Singleton Java Basics - Anfänger-Themen 5
R Methode in Singleton Klasse Java Basics - Anfänger-Themen 1
O Singleton Verständnis Java Basics - Anfänger-Themen 4
A Klasse,Vererbung,Interface,Singleton,Thread Java Basics - Anfänger-Themen 5
S Singleton (Design Patterns) Java Basics - Anfänger-Themen 16
R OOP Singleton Java Basics - Anfänger-Themen 10
U Vererben von Singleton Java Basics - Anfänger-Themen 17
S Singleton - Daten einspielen Java Basics - Anfänger-Themen 5
K Warum ist ein Singleton kein Best Practise? Java Basics - Anfänger-Themen 3
M Singleton mit Parametern im Konstruktor Java Basics - Anfänger-Themen 18
D Singleton beim JFrame zerstören Java Basics - Anfänger-Themen 4
L Java Serialisierung Singleton Java Basics - Anfänger-Themen 6
A JBoss-Anwendung soll im Singleton-Mode laufen Java Basics - Anfänger-Themen 6
Luk10 Problem mit Singleton bzw statischer Referenz! Java Basics - Anfänger-Themen 16
S Instanz(en) einer Singleton-Klasse Java Basics - Anfänger-Themen 11
S Statische Klassen/ Singleton Java Basics - Anfänger-Themen 13
J Warum verwendet man Singleton? Java Basics - Anfänger-Themen 7
B Was ist der unterschied zwischen Singleton und Strategy? Java Basics - Anfänger-Themen 6
S Singleton lazy Java Basics - Anfänger-Themen 8
A ist das ein Singleton-Pattern? Java Basics - Anfänger-Themen 6
F singleton Java Basics - Anfänger-Themen 4
T Singleton Java Basics - Anfänger-Themen 13
Antoras Singleton oder Controller / Datenverwaltungsklasse? Java Basics - Anfänger-Themen 10
D Objekte anlegen und Singleton Pattern Java Basics - Anfänger-Themen 21
D Denkfehler Singleton Java Basics - Anfänger-Themen 53
X Singleton - In diesem Fall sinnvoll? Java Basics - Anfänger-Themen 22
S Fragen zu synchronized + Singleton! Java Basics - Anfänger-Themen 10
M Singleton Pattern Java Basics - Anfänger-Themen 35
J Singleton Pattern Java Basics - Anfänger-Themen 5
S Singleton Pattern passend hierfür? Java Basics - Anfänger-Themen 60
M Mp3 Player mit Singleton Java Basics - Anfänger-Themen 8
M GUI als SingleTon Java Basics - Anfänger-Themen 6
B Singleton und Resourcebundle Java Basics - Anfänger-Themen 7
G Singleton Pattern Java Basics - Anfänger-Themen 7
D Singleton in Java implementieren Java Basics - Anfänger-Themen 6
H singleton Synchronisations Problem? Java Basics - Anfänger-Themen 2
M Singleton verwenden, aber wie? Java Basics - Anfänger-Themen 3
H Singleton mit Attributen Java Basics - Anfänger-Themen 7
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
A Rekursive Implementation eines Codes Java Basics - Anfänger-Themen 4
BorussiaMG1900 Implementation einer Methode Java Basics - Anfänger-Themen 1
N BlueJ Implementation Analoguhr Java Basics - Anfänger-Themen 33
L Erste Schritte Help with websocket protocol implementation Java Basics - Anfänger-Themen 5
D Fork/Join Implementation Java Basics - Anfänger-Themen 4
T Binärbaum-Suche Implementation Java Basics - Anfänger-Themen 6
P GUI: Mausklick-Implementation Java Basics - Anfänger-Themen 2
U Interface Bedeutung "Code to an interface rather than to an implementation." Java Basics - Anfänger-Themen 4
M Liste Implementation, doppelt next() Java Basics - Anfänger-Themen 13
W InsertSort Implementation Java Basics - Anfänger-Themen 5
L Methoden Files.walkFileTree implementation Java Basics - Anfänger-Themen 3
S Gute List Implementation Java Basics - Anfänger-Themen 5
K Telefonbuch Implementation mit Java Collections Java Basics - Anfänger-Themen 4
J this aus eingebetteter implementation heraus Java Basics - Anfänger-Themen 2
H implementation Java Basics - Anfänger-Themen 12
L Implementation gesucht - ArrayList.iterator() Java Basics - Anfänger-Themen 3
G Map-Implementation die nicht sortiert Java Basics - Anfänger-Themen 9
U Implementation von Beziehungen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben