Não é uma classe com todos os membros estáticos / métodos um tipo de padrão de design singleton? Existe alguma desvantagem em particular de ter tais classes? Uma explicação detalhada ajudaria.
Respostas:
17 para resposta № 1Este tipo de aula é conhecido como monostate - é um pouco diferente de um singleton.
Por que usar um monoestado em vez de um singleton? Em seus Papel original no padrão, Bell & Crawford sugerem três razões (parafraseadas por mim):
- Sintaxe de acesso mais natural
- singleton não tem nome
- mais fácil herdar de
Eu devo admitir, eu não acho nenhuma dessas coisas particularmente convincentes. Por outro lado, o monostato definitivamente não é pior que o singleton.
15 para resposta № 2
Robert C. Martin escreveu um artigo algumas vezes atrás sobre as diferenças entre o padrão de estado mono e o padrão singleton.
2 para resposta № 3
Considere uma família de classes de log. Todos eles implementam "LogMessage (message, file, line_number). Alguns enviam mensagens para stderr, alguns enviam emails para um conjunto de desenvolvedores, alguns incrementam a contagem da mensagem em particular em uma tabela de frequência de mensagens, alguma rota para / dev / null Em tempo de execução, o programa verifica seu vetor de argumento, registro ou variáveis de ambiente para o qual a técnica de Log usa e instancia o Singleton de Log com um objeto de uma classe adequada, possivelmente carregando uma DLL fornecida pelo usuário final para fazer isso. é difícil de duplicar com um Singleton estático puro.
1 para resposta № 4
classe com todos os membros estáticos / métodos uma espécie de padrão de design singleton
Classe - não padrão. Quando falamos de aulas podemos dizer classe implementa padronizar.
Funções estáticas - não é funções de membro, elas são semelhantes em funções globais. Talvez você não precise de aula alguma?
Citação do wikipedia:
Em engenharia de software, o singleton padrão é um padrão de design que é usado para restringir a instanciação de um classe para um objeto.
Por esta definição, sua implementação não é uma implementação única - você não usa a ideia comum Uma (ou várias na definição estendida) instância de classe.
Mas às vezes (nem sempre) o uso de classe com todas as funções estáticas e padrão singleton - não tem diferença significativa.
0 para a resposta № 5
Para um singleton, todos os construtores devem ser privados, para que você possa acessar somente através de uma função. Mas você está bem perto disso.