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

Questo è un post tradotto da IA.

제이온

[Effective Java] Elemento 3. Garantisci il singleton con un costruttore privato o un tipo di enumerazione

Seleziona la lingua

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

Testo riassunto dall'intelligenza artificiale durumis

  • Un singleton è una classe che può creare solo un'istanza e viene utilizzata per creare oggetti senza stato o componenti di sistema univoci.
  • Esistono modi per creare singleton come avere un membro statico pubblico come campo finale, fornire un metodo di fabbrica statico o utilizzare un tipo di enumerazione, e l'utilizzo di un tipo di enumerazione è il metodo migliore.
  • Quando si serializza una classe singleton, è necessario implementare Serializable, dichiarare tutti i campi di istanza come transitori e sovrascrivere il metodo readResolve().

Singleton

Il concetto di Singleton

Un singleton è una classe che può creare solo un'istanza. Un esempio tipico di singleton è un oggetto senza stato o un componente di sistema univoco. Tuttavia, le classi singleton sono difficili da testare a meno che il loro tipo non sia definito come interfaccia e la sua implementazione sia definita separatamente.


Come creare un singleton

Metodo con campo final static public


public class Elvis {

    public static final Elvis INSTANCE = new Elvis();

    private Elvis() {
    }

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


Il costruttore privato viene chiamato solo una volta quando si inizializza l'istanza di Elvis, garantendo che sia l'unica istanza nell'intero sistema. Tuttavia, è possibile chiamare il costruttore privato utilizzando AccessibleObject.setAccessible(), ma questo metodo di modifica mediante riflessione può essere prevenuto generando un'eccezione quando viene creato il secondo oggetto.


  • Vantaggi
    • È chiaro dall'API che la classe è un singleton.
    • È conciso.


Metodo che fornisce un metodo statico di fabbrica pubblico

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");
    }


Oltre alla modifica tramite riflessione, questo metodo garantisce anche che esista una sola istanza nell'intero sistema. Il campo viene semplicemente reso privato e il metodo statico di fabbrica viene utilizzato per restituire l'oggetto.


  • Vantaggi
    • È possibile modificare il singleton in modo che non sia più un singleton senza modificare l'API.
      • Ad esempio, il metodo statico di fabbrica può restituire istanze diverse per ogni thread che lo chiama.
    • È possibile convertirlo in un metodo di fabbrica singleton generico se necessario.
    • È possibile utilizzare il riferimento del metodo del metodo statico di fabbrica come fornitore.
      • Ad esempio, è possibile utilizzarlo come Supplier<Elvis> invece di Elvis::getInstance.


Se non hai bisogno di utilizzare i vantaggi sopra menzionati, è meglio utilizzare il primo metodo.


Metodo che utilizza un tipo enumerato

public enum Elvis {

    INSTANCE;

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


Il modo più desiderabile è quello di utilizzare un tipo enumerato. Questo metodo è più sicuro degli attacchi di riflessione e il codice è più pulito rispetto ai due metodi precedenti. Inoltre, come descritto di seguito, i due metodi precedenti hanno lo svantaggio di richiedere codice aggiuntivo per la serializzazione.

Tuttavia, è necessario prestare attenzione al fatto che se si desidera che il singleton ereditato ereditare un'interfaccia, è possibile ereditare un'interfaccia, ma non una classe.


Punti da considerare quando si serializza una classe singleton

Se si desidera serializzare una classe singleton creata utilizzando il primo o il secondo metodo sopra menzionato, è necessario dichiarare tutti i campi di istanza come transitori e sovrascrivere il metodo readResolve() oltre a implementare Serializable.


private Object readResolve throws ObjectStreamException {
    return INSTANCE;


Fonti

제이온
제이온
제이온
제이온
[Effettivi Java] Elemento 5. Non dichiarare risorse, utilizzare l'iniezione di dipendenze Se una classe dipende da risorse esterne, è meglio non utilizzare classi di utilità statiche o singleton. L'iniezione di dipendenze può migliorare la flessibilità, la riusabilità e la facilità di test della classe, e l'utilizzo del pattern di metodo di fa

28 aprile 2024

[Effective Java] Item 1. Consider static factory methods instead of constructors I metodi di fabbrica statici sono un modo flessibile ed efficiente per creare istanze invece di costruttori. Possono avere un nome, restituire istanze che soddisfano determinate condizioni e migliorare le prestazioni tramite il caching. A differenza del m

27 aprile 2024

[Effective Java] Item 4. Utilizzare un costruttore privato per impedire l'istanziamento Per le classi di utilità che includono solo metodi e campi statici, è consigliabile impostare l'accesso al costruttore su privato per impedire l'istanziamento. Ciò impedisce agli utenti di creare istanze della classe in modo errato, in quanto si basano su

28 aprile 2024

Modellazione concettuale dei dati La modellazione concettuale dei dati è il processo di separazione delle entità e di rappresentazione delle relazioni tra le entità tramite un ERD. Un'entità è un'unità di informazioni indipendente, mentre gli attributi sono i dati detenuti dall'entità. Gl
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 aprile 2024

Mocking Prisma Client per test unitari in NestJS Quando si eseguono test unitari su un'applicazione, è fondamentale eliminare le dipendenze esterne. È possibile eseguire test unitari in modo semplice utilizzando il metodo di mocking Jest di Prisma ORM. Installando il pacchetto jest-mock-extended, è poss
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2 aprile 2024

Come Rust impedisce i bug di concorrenza Rust è un linguaggio potente che affronta le sfide della programmazione concorrente. Il suo sistema di tipi e il modello di proprietà garantiscono la sicurezza nella condivisione e nel trasferimento di dati tra thread. Tramite pattern di mutabilità intern
곽경직
곽경직
곽경직
곽경직
곽경직

28 marzo 2024

[Concurrency] Operazione Atomica: Memory Fence e Memory Ordering Questo post del blog spiega come considerare l'ordine di memoria nelle operazioni atomiche e l'importanza delle opzioni di ordinamento. Vengono spiegate le diverse opzioni di ordinamento come Relaxed, Acquire, Release, AcqRel, SecCst, insieme ai vantaggi
곽경직
곽경직
곽경직
곽경직
곽경직

12 aprile 2024

[Javascript] Struttura dell'oggetto (V8) L'oggetto JavaScript in V8 Engine viene ottimizzato come una struttura in base allo stato e convertito in modalità Fast e modalità Dictionary che funziona come una hashmap. La modalità Fast è rapida con chiave e valore in un formato quasi fisso, ma se vie
곽경직
곽경직
곽경직
곽경직
곽경직

18 marzo 2024

[Non specializzato, sopravvivi come sviluppatore] 9. Siti adatti a creare un portfolio Introduciamo 3 tipi di siti che sono ideali per gli studenti di corsi finanziati dallo stato o di bootcamp per creare un portfolio per il lavoro. Puoi sviluppare un gruppo di lavoro comunemente utilizzato in azienda, ERP, sistemi interni di risorse umane
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

30 marzo 2024