Quando é que a Comunidade acreditam que é apropriado usar um Singleton? [duplicado]

StackOverflow https://stackoverflow.com/questions/138124

  •  02-07-2019
  •  | 
  •  

Pergunta

Duplicate possíveis:
Singleton: Como deve ser usado

Na sequência do excelente pergunta anterior 's Ewan Makepeace sobre o padrão Singleton, eu pensei que eu iria perguntar: 'quando é que a Comunidade acreditam que é apropriado usar um Singleton?'

Deixe-me oferecer-se um exemplo para criticar:

Eu tenho um singleton "IconManager". Ele começa a ler um arquivo de propriedades que indica onde meus ícones estão localizados no disco, e em seguida, lê todos os ícones e caches-los para uso futuro.

Os ícones podem ser usados ??em toda a minha UI (guias, tabelas, quadros etc) ... portanto, acessando-os através de um método Singleton estática é muito convinent. Eu também quero ter certeza de que os ícones são lidos uma vez e apenas uma vez (se seria muito lento para lê-los a partir do disco cada vez que eu precisava de um) A comunidade acredito que este é um uso adequado de uma Singleton? Se não, como mais poderia ele ter sido implementado?

Que outros usos válidos de Singletons pode haver?

Foi útil?

Solução

Seus implementos IconManager o padrão de fábrica, ele cria ícones. E você provavelmente só precisa de uma fábrica para ícones de construção. Assim, não problemas para este caso de usar um IMHO Singleton. Eu construí software com várias destas fábricas centralizadas e tudo funcionou bem.

Veja também esta discussão: A maioria dos exemplos comuns de mau uso de classe singleton

Outras dicas

Uma abordagem alternativa seria a criação de uma instância de sua classe que carrega os ícones e, em seguida, você passar uma referência a essa instância para cada controle que precisa acessar os recursos. Dessa forma, no futuro, você pode ter mais de um ícone loader e passá-los ao redor, conforme necessário. Mais flexível para o futuro, mas com o bastante grande desvantagem de fazer você passar a referência em torno de um controles zilhão.

Um bom uso do Singleton é ao acessar um recurso que só pode ter uma conexão ativa. Há muitos dispositivos de hardware que têm essa limitação.

Vamos dizer que você está se conectando a um CCTV câmera que só permite uma conexão. O padrão Singleton iria criar essa conexão na primeira utilização e mantê-lo aberto. Sempre que você precisava de uma imagem da câmera, possivelmente a partir de múltiplas fontes, você pode bater a Singleton sabendo que, ao outros problemas considerados, a imagem estará disponível.

Se a câmara tem um tempo de conexão inicial lento demais, segurando a abrir conexão, desta forma, em vez de abrir a conexão, agarrando uma imagem e fechar a conexão novamente poderia ser muito mais eficiente.

Eu realmente nunca usei um singleton, mas não usou padrões de design muito. Eu acho que eles ae muito valioso quando outros padrões de chamar para eles como os padrões de fábrica e Gateway. No entanto, eles quase nunca são bons por si mesmos.

Você pode querer considerar os Monostate padrão que lhe dá todos os benefícios do singleton sem muitas das desvantagens. Isso também permite que você tenha um objeto rica que tem estado que só acontece de ter as propriedades globais que você está procurando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top