JavaRush /Blogue Java /Random-PT /Padrão Singleton com suas próprias palavras
Roman_kh
Nível 33
Харьков

Padrão Singleton com suas próprias palavras

Publicado no grupo Random-PT

Olá a todos, javaRush!

Hoje vou falar sobre o padrão de design Singleton(único). Padrão Singleton com suas próprias palavras - 1Objetivo: criar uma classe que terá apenas UM objeto. Isso significa que não importa quantas vezes ele seja acessado, o mesmo objeto que foi criado na primeira vez será retornado. Isso é algo conveniente e necessário em muitos lugares, não é à toa que está sendo implementado em frameworks. Aplicativo:
  • Por exemplo, você precisa conectar um banco de dados a um projeto e uma classe que será responsável por conectar-se a ele. A conexão é criada uma vez e não há necessidade de criá-la repetidamente
  • Application settings— uma classe responsável pelas configurações de conexão necessárias para a aplicação: host e porta do banco de dados, etc. Eles são criados uma vez e usados ​​durante toda a operação do aplicativo.
  • Existem muitos outros exemplos que não mencionei, então escreva suas opções nos comentários! =)
Após esta introdução, pelo que entendi, podemos mostrar um exemplo desta classe: (Embora eu tenha certeza de que cada um de nós pode criar uma implementação disso) Aqui está o exemplo mais simples, quando tornamos o construtor privado, ou seja, Você não pode criar um objeto explicitamente. E existe um método estático getInstance()que fornece um objeto.
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Existem problemas com multithreading e então você pode colocar um método getInstance()marcador synchronized:
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static synchronized Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
No final, como sempre, quero dizer que se você pensa diferente ou encontra algum erro em mim, escreva nos comentários! Discutiremos tudo com prazer :) Se gostou do artigo escreva “+” e eu saberei. Isso é importante para mim :) PS: Estou adicionando mais implementações: De acordo com Joshua Bloch , esta é a melhor maneira de implementar o modeloEnum Singleton
public enum Singleton {
   INSTANCE;
}
Double Checked Locking & volatile
public class Singleton {
        private static volatile Singleton instance;

        public static Singleton getInstance() {
      Singleton localInstance = instance;
      if (localInstance == null) {
         synchronized (Singleton.class) {
            localInstance = instance;
            if (localInstance == null) {
               instance = localInstance = new Singleton();
            }
         }
      }
      return localInstance;
   }
}
E mais On Demand Holder idiom:
public class Singleton {

   public static class SingletonHolder {
      public static final Singleton HOLDER_INSTANCE = new Singleton();
   }

   public static Singleton getInstance() {
      return SingletonHolder.HOLDER_INSTANCE;
   }
}
+Inicialização lenta +Alto desempenho -Não pode ser usado para campos de classe não estáticos Qualquer dúvida/sugestão - escreva nos comentários! Veja também meus outros artigos:
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION