0

Singleton - Design Pattern - PHP x JS

Rogério Santos
Rogério Santos

Neste artigo, vou tratar das minhas impressões e resultados de pesquisas sobre o Padrão Singleton, estruturado como segue abaixo:

  • Qual problema ele resolve ou propõe resolver;
  • Estrutura do Padrão Singleton;
  • Exemplo de uso com PHP e JS.


Qual problema ele resolve ou propõe resolver?

O padrão Singleton propõe uma instância única, na qual, ao criar uma instância de uma classe, esta é verificada quanto a sua existência. Caso não exista, cria-se uma nova que será sempre retornada ao tentar criar outra. Isto é, após sua criação, mesmo objetos diferentes de mesma classe retornam sempre a inicialmente criada, intencionalmente, a fim de garantir menor consumo de memória e um único ponto de acesso global para o recurso.


A estrutura do Padrão Singleton

Em outras palavras, esta estrutura possui:

  • um atributo privado estático, chamado aqui de instance;
  • um construtor privado;
  • um método acessor getInstance público;


Exemplo de uso com PHP


Vamos analisar um exemplo simples, convencional, no qual criamos uma classe e a instanciamos em objetos diferentes:


Rodando no navegador, obtemos a saída:


Observe que são 6 objetos diferentes e seis instâncias diferentes da mesma classe, #1, #2, #3… 


Agora, utilizando o padrão Singleton:



O método getInstance() verifica a instância, criando uma nova caso não exista, e depois de criada, impede a criação de outras da mesma classe.


Veja o resultado no navegador:


Observe que as instâncias são sempre a mesma #1 para todo objeto criado.


Este padrão é muito utilizado na integração, juntamente com outros padrões, no desenvolvimento de classes responsáveis pela gestão de conexão com banco de dados ou gestão de logs, pois garante, digamos assim, acesso único ao recurso.


Veja o exemplo de conexão com banco de dados do pacote DataLayer (https://packagist.org/packages/coffeecode/datalayer)




Neste código, há 2 atributos estáticos e privados, $instance e $error, um método construtor privado, e entre outros, um método getInstance() que verifica se a variável $instance está vazia e, caso esteja, carrega esta variável com os dados do banco contidos na constante DATA_LAYER_CONFIG.  Massa, não? Eu acho muito legal.


No próximo post, vou apresentar este padrão com a linguagem Java Script e fazer uma análise comparativa.


Até breve!!!


Fontes:

Design Patterns in PHP and Laravel - Kelton Dockins

https://imasters.com.br/back-end/o-padrao-singleton-com-php

https://www.schoolofnet.com/curso-design-patterns-pt2-padroes-de-criacao/https://www.casadocodigo.com.br/products/livro-design-paterns-phphttps://github.com/webfatorial/PadroesDeProjetoPHP/tree/master/Creational/Singleton



0
0

Comentários (1)

0
Isaias Mendonça

Isaias Mendonça

13/04/2021 15:28

Já ouvi falar bastante desse pattern, mas é sempre bom aprender um pouquinho mais ^^.

Meu nome é Rogério Feliciano dos Santos, Sou desenvolvedor Full-Stack há 3 anos, sou professor de Matemática, gosto de desafios, atividades ao ar livre, maratonar séries, ouvir e tocar músicas.

Brasil