/ / static class e singleton - c ++, padrões de design, estático, singleton, monostate

classe estática e singleton - c ++, padrões de design, estático, singleton, monostate

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 № 1

Este 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.