7 Maneiras de Criar Singleton em Javascript
Olá, meus amantes de bits favoritos . Hoje vamos falar sobre a coisa mais comum que você pode usar em seu projeto — Singleton Pattern .
Para um de vocês que já sabe o que é singleton, continue rolando, tenho certeza que este artigo irá surpreendê-lo.
Para os outros…
Padrão Singleton - é o mais comumente usado e uma das coisas que são perguntadas em quase todas as entrevistas. Pode ser descrito como um padrão que restringe o uso de uma classe a um único uso. Ou seja, na sua aplicação é permitido ter apenas uma instância da sua classe.
Uma vez que isso está resolvido, vamos aos exemplos.
Este artigo incluirá exemplos de Javascript e Typescript .
Solteiro Clássico
A maneira mais icônica e clássica de implementar um singleton. Exemplo disso você pode encontrar em todos os tutoriais e em todos os livros de programação.
Exemplo de Javascript :
Exemplo de texto datilografado :
E aqui está como usá-lo:
ClassicSingleton.instance.invoke();
Prós
- Solução simples, direta e limpa
- Abordagem mais comum
- Inicializado na inicialização do aplicativo, o que pode levar à lentidão na inicialização do aplicativo
- Não pode ser herdado corretamente, o que significa que você precisa duplicar esse código em todas as classes em que deseja usar o singleton
O Lazy Singleton é usado principalmente quando você não deseja inicializar seu singleton imediatamente e deseja usá-lo apenas quando necessário. Uma boa maneira de fazer micro-otimização para seu aplicativo. Em outros assuntos está perto de Classic Singleton .
Exemplo de Javascript :
Exemplo de texto datilografado :
E aqui está como usá-lo:
LazySingleton.instance().invoke();
Prós
- Inicializado quando usado e não ocupa memória quando não foi chamado
- Solução simples e limpa
- Inicializado quando usado, o que pode levar a pequenos atrasos no primeiro uso
- Não pode ser herdado, o que significa que você precisa duplicar esse código em todas as classes em que deseja usar o singleton
Quase a mesma coisa que Lazy Singleton , mas usamos um getter em vez de uma função simples, o que nos permite evitar o uso de colchetes desagradáveis ().
Exemplo de Javascript :
Exemplo de texto datilografado :
Como usá-lo:
LazyGetterSingleton.instance.invoke();
Tem os mesmos prós e contras do Lazy Singleton .
Importar Singleton
Não se pode dizer que essa abordagem seja comum, pois nem toda linguagem de programação segue o paradigma de exportar/importar declarações de arquivos.
Exemplo de Javascript ES6 (Babel):
Exemplo de Javascript (nó):
Exemplo de texto datilografado :
Como usar o Javascript ES6 (Babel) e a versão Typescript :
import { importSingletion } from "./ImportSingleton";
importSingleton.invoke();
const importSingleton = require("./ImportSingleton");
importSingleton.invoke()
Prós
- Solução simples, direta e limpa
- Inicializado na inicialização do aplicativo, o que pode levar à lentidão na inicialização do aplicativo
- Não pode ser automatizado, o que leva à duplicação da base de código
Decorador Singleton
Abordagem interessante quando você usa dois padrões juntos: Singleton e Decorator .
A ideia principal é minimizar a duplicação de código.
Exemplo de Javascript :
Você pode usá-lo com Typescript , mas infelizmente, por padrão, o Typescript não percebe a propriedade dinâmica e você precisa escrever um código adicional e bastante sujo para Typescript para suportá-lo. É por isso que é preferível não usar essa abordagem com Typescript .
Como usá-lo:
DecoratorSingleton.instance.invoke();
- Solução simples, direta e limpa
- Você pode manter uma base de código razoavelmente limpa e evitar duplicações de código
- Inicializado na inicialização do aplicativo, o que pode levar à lentidão na inicialização do aplicativo
Abordagem legal, que novamente une dois padrões, Singleton e Decorator , mas também permite que você visualize seus singletons de um ângulo diferente. E como bônus, abre as portas para um conhecimento profundo de Javascript .
Exemplo de Javascript :
Exemplo de texto datilografado :
E aqui está como usar as versões Javascript e Typescript :
new BindSingleton().invoke()
BindSingleton().invoke()
Você pode verificar a exatidão com:
new ConstructorSingleton() === new ConstructorSingleton() // => true
ConstructorSingleton() === ConstructorSingleton() // => true
Bem, simples. Em primeiro lugar, nossa BindSingletonnunca foi uma classe, é uma função. É por isso que podemos usar BindSingleton()nele. Legal certo?
Agora, e new BindSingleton(), por que continua retornando a mesma instância? Muito óbvio novamente, nossas verificações lógicas na instanceverificação de função para propriedades estáticas na classe, se a propriedade não existir, criamos uma instância de nossa classe e, se a propriedade existir — nós a usamos em vez de inicializar uma nova instância.
Prós
- Oferece várias maneiras de acessar seu singleton
- Considerado solteiro preguiçoso
- Você pode manter sua base de código razoavelmente limpa
- Requer conhecimento profundo de Javascript e pode confundir desenvolvedores inexperientes
- Em comparação com outros métodos — muito código.
Construtor Singleton
Este requer uma compreensão muito profunda de como o Javascript funciona, mas é realmente uma solução elegante.
Exemplo de Javascript :
Exemplo de texto datilografado:
E aqui está como usá-lo:
new ConstructorSingleton().invoke()
new ConstructorSingleton() === new ConstructorSingleton() // => true
Quando executamos nosso código pela primeira vez - ele inicializa cachee nossa criação da instância quando chega a constructor, verifica o valor de retorno e, no construtor de primeira execução, retorna undefinedo que força o Javascript a criar uma nova instância da classe. Mas todas as execuções a seguir obterão nossa instância cachee constructorretornarão nossa instância, em vez de undefinedindicar ao Javascript que deve retornar nossa instância existente.
Contras :
- Requer conhecimento profundo de Javascript
- Inicializado na inicialização do aplicativo, o que pode levar à lentidão na inicialização do aplicativo
- Não pode ser herdado corretamente, o que significa que você precisa duplicar esse código em todas as classes em que deseja usar o singleton
Recursos
- Link para o repositório
Não se esqueça de me seguir para mais!
Sua parte. 01101100 01101111 01110110 01100101





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)