2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Quando um aplicativo precisa controlar o compartilhamento de recursos, realizar gerenciamento de configuração e operações de registro de log, um requisito comum é usar um ponto de acesso global para que o programa possa acessá-lo através desse ponto de acesso global, não importa onde ele esteja. informações relevantes da instância. Para atender a essa necessidade, podemos usar o Padrão Singleton. O padrão singleton garante que uma classe tenha apenas uma instância e fornece um ponto de acesso global para acessar essa instância.
Especificamente, o padrão singleton geralmente fornece um método estático (como getInstance()) que retorna a única instância da classe. Como este método é estático, ele pode ser chamado sem criar uma instância da classe. Isso significa que qualquer código que tenha acesso à classe pode obter uma instância singleton chamando esse método estático.
Este artigo apresentará em detalhes os conceitos básicos e as etapas de implementação do padrão singleton. Através deste artigo, você poderá entender como funciona o padrão singleton e aprender como utilizá-lo de forma eficaz em projetos reais.
Para dar um exemplo interessante, o modelo singleton é como a auréola do protagonista num mundo de anime. Não importa como o enredo se desenvolve, há sempre apenas um protagonista, e todos sabem que ele é o núcleo da história. Dessa forma, não importa como a história se desenrole, todos poderão encontrar a mesma pessoa para impulsionar a trama.
vantagem
Garanta uma instância única: evite a criação duplicada de instâncias e economize recursos.
ponto de acesso global: Acesso global conveniente e chamadas simplificadas.
Inicialização lenta: crie instâncias sob demanda para melhorar o desempenho.
deficiência
Difícil de escalar: As classes singleton geralmente são difíceis de estender porque o construtor é privado.
possíveis problemas de desempenho: em um ambiente de alta simultaneidade, algumas implementações podem apresentar problemas de desempenho.
Dificuldade em testar: O padrão singleton pode dificultar os testes porque é um estado global.
De acordo com as características do padrão singleton, seus cenários de uso podem ser divididos nas seguintes categorias:
A implementação do padrão singleton geralmente inclui três elementos:
- construtor privado, torne o construtor da classe privado para que o exterior não possa criar uma instância por meio da palavra-chave new.
- Pontos de referência estáticos privados para a própria instância, crie uma variável de instância estática dentro da classe para salvar a instância exclusiva.
- Métodos estáticos públicos que retornam sua própria instância, forneça um método estático para que o mundo externo possa obter a única instância por meio desse método.
Para o modo singleton estilo Hungry, a instância singleton é construída quando a classe é carregada, o que é thread-safe porque um objeto estático foi criado quando a classe é carregada e a velocidade de resposta é rápida quando chamada. A desvantagem também é óbvia. A eficiência de recursos não é alta, desde que outros métodos estáticos da classe sejam executados ou a classe seja carregada, esta instância ainda será inicializada.
/**
* 饿汉单例模式:在还没有实例化的时候就初始化
*/
public class Hungry {
//1. 开始时就创建实例
private static final Hungry instance=new Hungry();
// 2. 私有化的构造方法
private void hungry() {
}
public static Hungry getInstance() {
// 返回单例名
return instance;
}
}