Singleton

singleton

Vou falar hoje sobre um design pattern muito útil e bastante utilizado hoje em dia no desenvolvimento de softwares: o Singleton.

Mas o que é um design pattern? Um design pattern é uma solução reutilizável para um problema recorrente no desenvolvimento de sistemas orientados à objetos. Não necessariamente é o código final, mas sim um modelo de como resolver o problema em questão, e que pode ser usado em muitas situações diferentes. Conforme explicações encontradas na internet, os Design Patterns (em português, Padrões de Projeto) “definem relações e interações entre classes ou objetos, sem especificar os detalhes destes, ou seja, estão em um nível de generalidade mais alto“.

Em geral, um padrão de projeto define 5 elementos: seu próprio nome, o problema, a solução, os momentos em que este deve ser aplicado e suas consequências.

Agora que já temos uma ideia do que é um Padrão de Projeto, falaremos de um deles em específico, o Singleton.

 

O Singleton é um padrão de projeto que garante a existência de apenas uma única instância de uma classe. Simples assim. Não há muito o que explicar… Imagine uma situação que você tem uma classe de conexão com o banco de dados. Para cada novo objeto desta classe, você criaria uma nova conexão, e caso não haja um controle disto, em algum momento você terá diversas conexões abertas com o banco sem estar em uso. O padrão Singleton resolve isso para você. Aplica-se o padrão nesta classe de conexão, e após ser instanciada uma única vez, ela mantém a conexão, e quando for “instanciada” novamente, ela devolve esta única conexão já aberta.

Vamos ver um exemplo codificado para ficar mais fácil de absorver a ideia.

<?php

class Conexao
{
    private static $conexao = null;

    private function __construct(){}

    public static function getInstance()
    {
        if (self::$conexao == null) {
            self::$conexao = mysqli_connect('host', 'user', 'senha','banco');
        }
        return self::$conexao;
    }
}

Linha 3: Criamos a classe Conexao.

Linha 5: Definimos um atributo estático $conexao, com valor null inicialmente.

Linha 7: Definimos um construtor privado, para que a classe não possa ser instanciada diretamente.

Linha 9: Definimos uma função estática chamada getInstance(). Ela é a que faz toda a mágica.

Linha 11: Verificamos se o atributo estático $conexao é null.

Linha 12: Se a linha 11 for verdadeira, definimos este atributo estático como uma conexão ao banco de dados através do MySQLi.

Linha 14: devolvemos o atributo $conexão, com uma conexão ativa ao banco de dados.

 

Agora, para utilizar isto, vou exemplificar rapidamente. Observe abaixo:

<?php
require_once 'Conexao.php';

$conn1 = Conexao::getInstance();

Linha 2: estamos chamando o arquivo Conexao.php (se você usa um autoload e os arquivos estiverem no mesmo diretório, isto não é necessario)

Linha 4: Chamamos, de modo estático, a função getInstance(). Ela faz a verificação exposta anteriormente. Somente em sua primeira chamada o atributo $conexao será null, e neste caso ele irá gerar uma conexão. Se por acaso você criar uma nova variável chamando novamente o getInstance(), será retornado à você a mesma conexão criada anteriormente.

 

Fácil, não? Os Padrões de Projeto as vezes se tornam um pouco abstratos demais e ao mesmo tempo confusos. O ideal é estudá-los, analisá-los e aplicá-los em testes para poder entender de maneira mais profunda cada um, pois só assim poderemos saber em quais casos reais devemos usá-los ou não.

Comentem aí suas experiências com este padrão, deem sugestões e dicas para outros que possa a vir a escrever e compartilhem este tutorial com outros desenvolvedores que ainda não o conhecem!
Obrigado mais uma vez pela atenção e paciência em ler mais um tutorial deste maluco que vos escreve!

 


Marcado com: , ,
Publicado em Desenvolvimento
Volte Sempre!
Meus artigos te ajudaram de alguma forma e você não sabe como me agradecer? Que tal me pagar uma Coca-Cola bem gelada?

Sobre o autor

Me chamo Ricardo Brusch, sou programador e desenvolvedor de sistemas para internet. Também sou aspirante a escritor, e você pode ler alguns de meus contos malucos em contos.ricardobrusch.com.br.
Parceiros





Publicidade