Erstellen von singleton-Objekt, beste Weg

Erstellen Sie ein singleton-Objekt, und ich fand 3 Möglichkeiten, welche ist besser und warum sind die anderen schlecht. Der Konstruktor wird davon ausgegangen, dass die privaten.

Methode 1:

class ClassX{  
   private static ClassX objX = null;

      static{
          objX = new ClassX();
      }

   //get objX method
 }

Methode 2:

 class ClassX{  
   private static ClassX objX = new ClassX();

   //get objX method
 }

Methode 3:

 class ClassX{  
   private static ClassX objX = null;

   public ClassX getInstance(){
      if(objX == null)
          return new ClassX();
      else
          return objX;
   }
 }
  • Erwägen Sie die Verwendung einer enum. Auch, lazy vs. eager überlegungen sind anwendungsspezifisch.
  • Ich sehe nur die Methode 3 als singleton-pattern :/
  • Dependency injection statt.
  • Dann schlage ich vor, möchten Sie vielleicht, um Ihre Augen ausgecheckt 🙂 Alle drei Ausschnitte sind singletons, Methode 3 ist die nur faul initialisiert eine. Das ist, vorausgesetzt, es ist ein private Konstruktor, sonst keiner von Ihnen garantieren, ein singleton. (Hängt davon ab, wie definieren Sie diesen Begriff: ein Objekt, von dem nur eine Instanz ist, die jemals erschaffen; oder ein Objekt, von dem nur eine Instanz kann immer erstellt werden.)
  • Warum sind die anderen beiden nicht-singleton? Sie produzieren auch nur eine Instanz im Leben Zeit.
  • Yup, der Konstruktor wird davon ausgegangen, dass die privaten. Habe ich erwähnt, dass.
  • möglich, Duplikat der Was ist eine effiziente Methode zum implementieren eines singleton-pattern in Java?
  • nicht-singleton-bedeutet "ein Objekt, von dem nur eine Instanz kann immer erstellt werden"?
  • Nicht unbedingt. Ich behaupte, dass es kann sowohl bedeuten, je nachdem, ob du den Begriff in ein design (Muster -) Kontext, oder in einer Implementierung ein. Das ist, wenn ich mit dependency injection, und in meiner bootstrap-code immer nur eine Instanz einer Komponente, und füge nur diese Instanz in jedes Objekt, die es braucht, als ein Mitarbeiter, würde ich sagen, diese Komponente ist immer noch ein singleton, obwohl es nichts zu verhindern, dass andere (fälschlicherweise) erstellen einer anderen Instanz.
  • Ich immer verwenden Sie Methode 3, aber nicht wissen, es ist faul initialisiert man... ich einfach wikipedia Lesen, und Sie geben ziemlich gute Beschreibung der einzelnen Stil
  • Jedenfalls ist nicht die einfachste sichere Weg, dies zu tun public static final INSTANCE = new Foo();?
  • Viele Nutzer/Beantworter hier anscheinend keine völlige Ahnung was genau das singleton-Entwurfsmuster zu lösen versucht. Wenn Sie solche ein, Lesen Sie dieses: en.wikipedia.org/wiki/Singleton_pattern. Der "beste Weg", um es zu implementieren ist entweder die Pugh-oder Enum-Lösung. Je nach den konkreten funktionalen Anforderungen, die der OP nicht sagen, irgendein Wort über die richtige Art und Weise zu erreichen, dass die funktionale Anforderung ist jedoch mehr als oft erstellen Sie einfach ein.
  • Ich wünschte, ich könnte upvote diese Bemerkung mehr als einmal.

InformationsquelleAutor Harke | 2013-10-17
Schreibe einen Kommentar