Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

Dies ist ein von KI übersetzter Beitrag.

제이온

[Effektives Java] Artikel 3. Garantieren Sie Singleton mit einem privaten Konstruktor oder einem Aufzähltyp

  • Schreibsprache: Koreanisch
  • Referenzland: Alle Länder country-flag

Sprache auswählen

  • Deutsch
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Von durumis AI zusammengefasster Text

  • Ein Singleton ist eine Klasse, die nur eine Instanz erzeugen kann. Sie wird verwendet, um zustandslose Objekte oder eindeutige Systemkomponenten zu erstellen.
  • Es gibt drei Möglichkeiten, ein Singleton zu erstellen: ein öffentliches statisches Mitglied, das ein finales Feld ist, eine statische Fabrikmethode und die Verwendung eines Aufzähltyps. Die Verwendung eines Aufzähltyps ist die beste Methode.
  • Wenn eine Singleton-Klasse serialisiert wird, muss Serializable implementiert werden, alle Instanzfelder müssen als transient deklariert werden und die Methode readResolve() muss überschrieben werden.

Singleton

Das Singleton-Konzept

Ein Singleton ist eine Klasse, die nur eine einzige Instanz erstellen kann. Typische Beispiele für Singletons sind zustandlose Objekte oder eindeutige Systemkomponenten. Allerdings ist es schwierig, Singleton-Klassen zu testen, wenn der Typ nicht als Schnittstelle definiert ist und eine Implementierung daraus erzeugt wird.


So erstellen Sie ein Singleton

public static Member als final Feld


public class Elvis {

    public static final Elvis INSTANCE = new Elvis();

    private Elvis() {
    }

    public void speak() {
        System.out.println("elvis");
    }


Der private Konstruktor wird nur einmal beim Initialisieren der Elvis-Instanz aufgerufen und stellt sicher, dass es sich um die einzige Instanz im gesamten System handelt. Es ist jedoch möglich, den privaten Konstruktor mit AccessibleObject.setAccessible() aufzurufen. Diese Manipulation durch Reflexion kann durch das Auslösen einer Ausnahme beim Erstellen des zweiten Objekts verhindert werden.


  • Vorteile
    • Es wird in der API deutlich, dass die Klasse ein Singleton ist.
    • Knappheit.


Statische Fabrikmethode, die mit public static bereitgestellt wird

public class Elvis {

    private static final Elvis INSTANCE = new Elvis();

    private Elvis() {
    }

    public static Elvis getInstance() {
        return INSTANCE;
    }

    public void speak() {
        System.out.println("elvis");
    }


Mit Ausnahme von Manipulationen durch Reflexion stellt auch diese Methode sicher, dass es sich um die einzige Instanz im gesamten System handelt. Nur das Feld ist privat und die Objekt zurückgabe erfolgt über eine statische Fabrikmethode.


  • Vorteile
    • Sie können ein Singleton in ein Nicht-Singleton ändern, ohne die API zu ändern.
      • Sie können beispielsweise verschiedene Instanzen pro Thread erstellen, die von der statischen Fabrikmethode zurückgegeben werden.
    • Sie können es in eine generische Singleton-Fabrikmethode ändern, wenn Sie möchten.
    • Der Methodenverweis der statischen Fabrik kann als Anbieter verwendet werden.
      • Sie können beispielsweise Elvis::getInstance anstelle von Supplier<Elvis> verwenden.


Wenn Sie die oben genannten Vorteile nicht nutzen möchten, ist es besser, die erste Methode zu verwenden.


Verwendung des Aufzählungstyps

public enum Elvis {

    INSTANCE;

    public void speak() {
        System.out.println("elvis");
    }


Die beste Methode ist die Verwendung des Aufzählungstyps. Im Vergleich zu den beiden oben genannten Methoden ist sie sicherer gegen Reflexionsangriffe und der Code ist übersichtlicher. Darüber hinaus müssen Sie, wie weiter unten beschrieben, bei den beiden oben genannten Methoden zusätzliche Codezeilen für die Serialisierung hinzufügen.

Beachten Sie jedoch, dass ein zu erstellendes Singleton eine Schnittstelle erben kann, aber keine Klasse.


Was ist bei der Serialisierung von Singleton-Klassen zu beachten?

Wenn Sie eine Singleton-Klasse erstellen, die die erste oder zweite Methode verwendet, müssen Sie, abgesehen davon, dass Sie Serializable implementieren, alle Instanzfelder als transient deklarieren und die Methode readResolve() überschreiben.


private Object readResolve throws ObjectStreamException {
    return INSTANCE;


Quelle

제이온
제이온
제이온
제이온
[Effektives Java] Punkt 5: Verwenden Sie Dependency Injection anstelle von expliziten Ressourcen Wenn eine Klasse von externen Ressourcen abhängt, sollten Singleton- und statische Utility-Klassen vermieden werden. Durch Dependency Injection können Sie die Flexibilität, Wiederverwendbarkeit und Testbarkeit der Klasse verbessern. Die Verwendung des Fac

28. April 2024

[Effektives Java] Item 1. Statische Fabrikmethoden in Betracht ziehen Statische Fabrikmethoden sind eine flexible und effiziente Möglichkeit, Instanzen zu erstellen, anstatt Konstruktoren zu verwenden. Sie können benannt werden, Instanzen zurückgeben, die bestimmten Bedingungen entsprechen, und die Leistung durch Caching ve

27. April 2024

[Effektives Java] Artikel 4. Verwenden Sie einen privaten Konstruktor, um die Instanziierung zu verhindern Bei Utility-Klassen, die nur statische Methoden und Felder enthalten, sollten Sie den Zugriffsschutzmodifizierer des Konstruktors auf private setzen, um die Instanziierung zu verhindern. Dadurch wird verhindert, dass Benutzer den Konstruktor für automatis

28. April 2024

Konzeptionelles Datenmodellieren Konzeptionelles Datenmodellieren ist der Prozess, Entitäten zu trennen und die Beziehungen zwischen Entitäten in einem ERD darzustellen. Entitäten sind unabhängige Informationseinheiten, und Attribute sind die Daten, die eine Entität besitzt. Ein Bezeichn
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8. April 2024

[Concurrency] Atomarer Vorgang: Memory Fence und Memory Ordering Dieser Blogbeitrag erklärt, wie bei atomaren Operationen die Reihenfolge im Speicher berücksichtigt wird, und die Bedeutung von Ordering-Optionen. Es werden verschiedene Ordering-Optionen wie Relaxed, Acquire, Release, AcqRel, SecCst erläutert und die Vor
곽경직
곽경직
곽경직
곽경직
곽경직

12. April 2024

Wie Rust Konsistenzfehler verhindert Rust ist eine leistungsstarke Sprache, die die Herausforderungen der konkurrenten Programmierung bewältigt. Dank des Typsystems und des Besitzmodells ist der Datenaustausch und die gemeinsame Nutzung zwischen Threads sicher. Durch Muster der internen Vari
곽경직
곽경직
곽경직
곽경직
곽경직

28. März 2024

[Javascript] Objektstruktur (V8) Das JavaScript-Objekt wird in der V8-Engine je nach Zustand als strukturierte, optimierte Fast-Mode oder als Hashmap-basierter Dictionary-Mode dargestellt. Der Fast-Mode ist schnell, wenn Schlüssel und Werte fast fixiert sind, aber bei der Hinzufügung neu
곽경직
곽경직
곽경직
곽경직
곽경직

18. März 2024

Prisma Client Mocking für Unit-Tests in NestJS Beim Unit-Test von Anwendungen ist die Entfernung externer Abhängigkeiten von großer Bedeutung. Mit der Jest-Mocking-Methode von Prisma ORM können Sie Unit-Tests einfach durchführen. Nach der Installation des Pakets jest-mock-extended können Sie Prisma Cl
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2. April 2024

[Metallwerkstoff-Meisterprüfung Praxis] 33. Ausgabe gelöst Metallische Werkstoffe, Kristallstruktur, Perlit-Nukleationsvorgang, Ferrit-Kristallkorngrößenmessmethode, die fünf Hauptbestandteile von Stahl und der Einfluss von Mangan, Maßnahmen zur Vermeidung von Anlassversagen, Eigenschaften des Abschreckens, Berec
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi

23. April 2024