Definição: A principal função do padrão Singleton é garantir que, nos aplicativos Java, exista apenas uma instância de uma classe.
Em muitas operações, como o estabelecimento de uma conexão de banco de dados de diretório, é necessária uma operação de thread única.
Além disso, o Singleton pode ser o Estado; As classes Singleton você pode manter essa contagem e aumentar automaticamente 1 sincronizar com segurança.
Além disso, Singleton também pode estar sem estado. Fornece funções semelhantes a ferramentas,
O modelo Singleton nos oferece a possibilidade de implementar dessa maneira. A vantagem de usar o Singleton é que ele pode salvar a memória, porque limita o número de instâncias e é propício à Java Garbage Collection.
Muitas vezes vemos que os carregadores de classe também são implementados no modo singleton no modo de fábrica, porque a classe carregada realmente pertence a recursos.
Como usar o modo singleton
O padrão geral de singleton geralmente tem várias formas:
A cópia do código é a seguinte:
classe pública Singleton {
Private Singleton () {}
// Não é estranho definir uma instância de si mesmo dentro de si mesmo?
// Observe que isso é privado apenas para chamadas internas
Instância de Singleton estático privado = new Singleton ();
// Aqui está um método estático para acesso externo a esta classe, que pode ser acessada diretamente
public static singleton getInstance () {
instância de retorno;
}
}
O segundo formulário:
A cópia do código é a seguinte:
classe pública Singleton {
Instância de singleton estática privada = nulo;
public static sincronizado singleton getInstance () {
// Este método é melhorado sobre o acima.
// Crie instâncias durante o uso, melhorando a eficiência!
if (instance == null)
instância = new singleton ();
instância de retorno;
}
}
Singleton.getInstance () pode ser usado para acessar as classes singleton.
A segunda forma acima é a inicialização preguiçosa, o que significa que o singleton inicial é chamado pela primeira vez e não há necessidade de ser gerado no futuro.
Observe que sincronizado no formulário de inicialização preguiçoso é importante. Existem muitas discussões sobre a inicialização preguiçosa sobre o bloqueio verificado duas vezes (DCL), e os interessados nela estudarão ainda mais.
Acredita -se geralmente que a primeira forma seja mais segura.
Coisas a serem observadas ao usar o modo singleton
Às vezes, em alguns casos, o uso de singleton não pode alcançar o objetivo do Singleton. -Server e JVM cruzado.
Vamos levar o ServiceLocator do código -fonte da loja de animais da Sun (loja de animais de estimação 1.3.1) como exemplo e analisá -lo brevemente:
Na loja de animais, existem dois tipos de serviceLocator, um está no diretório EJB e o outro está no diretório da web. Serviços de posicionamento, mas por que separá -los? Após um estudo cuidadoso desses dois serviços, descobri a diferença: o ServiceLocator adota o modo Singleton na Web, o ServiceLocator pertence ao posicionamento de recursos, então é claro que o modo singleton deve ser usado. No entanto, no EJB, o modelo Singleton perdeu sua função, de modo que o ServiceLocator é dividido em dois tipos, um é para serviços da Web e o outro é para serviços EJB.
O padrão Singleton parece simples e é muito conveniente de usar, mas é muito difícil usá -lo bem.