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

Esta é uma postagem traduzida por IA.

제이온

[Effective Java] Item 3. Garanta o Singleton com um construtor privado ou um tipo de enumeração

  • Idioma de escrita: Coreana
  • País de referência: Todos os países country-flag

Selecionar idioma

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

Texto resumido pela IA durumis

  • Um Singleton é uma classe que permite a criação de apenas uma instância, sendo utilizada para criar objetos sem estado ou componentes de sistema exclusivos.
  • Existem três métodos para criar um Singleton: usar um membro estático público como um campo final, fornecer um método de fábrica estático ou usar um tipo de enumeração, sendo este último o mais desejável.
  • Ao serializar uma classe Singleton, é necessário implementar Serializable, declarar todos os campos de instância como transient e sobrescrever o método readResolve().

Singleton

O conceito de Singleton

Singleton é uma classe que permite a criação de apenas uma instância. Um exemplo típico de Singleton é um objeto sem estado ou um componente do sistema único. No entanto, as classes Singleton são difíceis de testar, a menos que o tipo seja definido como uma interface e sua implementação seja definida separadamente.


Como criar um Singleton

Método de usar um membro estático público como um campo final


public class Elvis {

    public static final Elvis INSTANCE = new Elvis();

    private Elvis() {
    }

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


O construtor privado é chamado apenas uma vez ao inicializar a instância Elvis, garantindo que ela seja a única em todo o sistema. No entanto, o construtor privado pode ser chamado usando AccessibleObject.setAccessible(), mas esse método de modificação por reflexão pode ser bloqueado lançando uma exceção ao criar o segundo objeto.


  • Vantagens
    • É evidente na API que a classe é um Singleton.
    • Conciso.


Método de fornecer um método de fábrica estático público

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


Este método também garante que seja a única instância em todo o sistema, exceto para modificações por reflexão. Apenas o campo foi alterado para privado e o retorno do objeto está sendo realizado usando um método de fábrica estático.


  • Vantagens
    • É possível mudar para algo que não seja um Singleton sem alterar a API.
      • Por exemplo, o método de fábrica estático pode ser usado para retornar uma instância diferente para cada thread.
    • Se você quiser, pode mudar para um método de fábrica de Singleton genérico.
    • A referência de método do método de fábrica estático pode ser usada como um fornecedor.
      • Por exemplo, em vez de Elvis::getInstance, você pode usar Supplier<Elvis>.


Se você não precisar usar as vantagens acima, é melhor usar o primeiro método.


Método de usar um tipo de enumeração

public enum Elvis {

    INSTANCE;

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


O método mais desejável é usar um tipo de enumeração. Em comparação com os dois métodos acima, ele é mais seguro contra ataques por reflexão e o código é mais limpo. Além disso, como discutiremos abaixo, os dois métodos acima têm a desvantagem de requerirem código adicional ao serializar.

No entanto, você deve ter cuidado porque, embora o Singleton que deseja criar possa herdar uma interface, ele não pode herdar uma classe.


Pontos a serem observados ao serializar uma classe Singleton

Se você quiser serializar uma classe Singleton criada usando o primeiro ou o segundo método acima, além de simplesmente implementar Serializable, você deve declarar todos os campos de instância como transient e sobrescrever o método readResolve().


private Object readResolve throws ObjectStreamException {
    return INSTANCE;


Fonte

제이온
제이온
제이온
제이온
[Effective Java] Item 5: Use dependency injection instead of explicitly specifying resources Se uma classe depender de recursos externos, é melhor não usar singletons e classes de utilitário estáticas. A injeção de dependência pode ser usada para melhorar a flexibilidade, reusabilidade e facilidade de teste da classe, e o padrão de fábrica pode s

28 de abril de 2024

[Effective Java] Item 1: Considere métodos de fábrica estáticos em vez de construtores Os métodos de fábrica estáticos são uma maneira flexível e eficiente de criar instâncias em vez de construtores. Eles podem ter um nome, retornar instâncias que atendem a condições específicas e melhorar o desempenho por meio do cache. Ao contrário do pad

27 de abril de 2024

[Effective Java] Item 4. Use a private constructor to prevent instantiation As for utility classes that contain only static methods and fields, it is good practice to set the access modifier of the constructor to private to prevent instantiation. This prevents users from mistaking the constructor for a automatically generated one

28 de abril de 2024

Modelagem de dados conceitual A modelagem de dados conceitual é o processo de separar entidades, representar suas relações em um ERD. Uma entidade é uma unidade de informação independente, e um atributo é o dado que uma entidade possui. Um identificador identifica exclusivamente uma e
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 de abril de 2024

Simulando o Prisma Client para testes unitários no NestJS Ao realizar testes unitários em uma aplicação, a remoção de dependências externas é crucial. Com o método de simulação do Jest para o Prisma ORM, você pode realizar testes unitários de forma simples. Após instalar o pacote jest-mock-extended, você pode si
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2 de abril de 2024

Como a Rust previne bugs de simultaneidade Rust é uma linguagem poderosa que resolve os desafios da programação concorrente. Seu sistema de tipos e modelo de propriedade garantem a transferência e o compartilhamento de dados seguros entre threads. Padrões de mutabilidade interna, como Mutex, Chann
곽경직
곽경직
곽경직
곽경직
곽경직

28 de março de 2024

[Concorrência] Operação Atômica: Memory Fence e Memory Ordering Esta postagem de blog explica como considerar a ordem da memória em operações atômicas e a importância das opções de ordenamento. Ele explica as várias opções de ordenamento, como Relaxado, Adquirir, Lançar, AcqRel e SecCst, junto com os prós e contras de
곽경직
곽경직
곽경직
곽경직
곽경직

12 de abril de 2024

Gato de rua Não há visualização prévia do durumis AI.
ModuMaru
ModuMaru
ModuMaru
ModuMaru
ModuMaru

2 de maio de 2024

[Javascript] Estrutura do Objeto (V8) O Objeto JavaScript no motor V8 é otimizado como uma estrutura dependendo do estado, alternando entre o modo Rápido e o modo Dicionário, que funciona como um mapa hash. O modo Rápido é rápido quando as chaves e valores são quase fixos, mas quando uma nova
곽경직
곽경직
곽경직
곽경직
곽경직

18 de março de 2024