wiki:WF/Singleton

Version 1 (modified by trac, 12 years ago) (diff)

--

Propriedades estáticas podem ser utilizadas também para implementar o Design Pattern conhecido como Singleton. Muitas vezes, ao implementarmos um programa, precisamos que determinado recurso (objeto) seja instanciado somente uma única vez, não importando quantas partes do programa utilizam este recurso, o mesmo não deve ser instanciado diferentes vezes para diferentes utilizações.

Um exemplo prático são interfaces de hardware, ou mesmo objetos de conexão com o banco de dados, onde devemos ter um único link de conexão para múltiplas operações, ou mesmo um sistema onde temos várias impressoras conectadas ao sistema, mas apenas uma única fila de impressão. Logo o objetivo do Design Pattern Singleton é garantir que a classe tenha uma unica instância e também garantir um ponto de acesso à esta instância. No exemplo, teremos uma Classe de Conexão com o Banco de Dados, chamada ConexaoBancoDados, e utilizaremos o conceito de propriedades estáticas e o método RetornaInstancia(), para implementar o Design Pattern Singleton.

1. Classe para conexões ao Banco de Dados



class !ConexaoBancoDados

{

// propriedade estática que armazenará

// a instância única.

private static $instancia = null;



// Método construtor qualquer

private function __construct() {}



// Método para obter a instância

public static function !RetornaInstancia ()

{

// caso não exista a instância

// instancia [primeira vez]

if (self::$instancia == null)

{

// instancia objeto

echo "Criando instancia\n";

self::$instancia = new !ConexaoBancoDados;

}

// retorna a instância criada.

return self::$instancia;

}

}



// Obtém a instância de Conexão.

$a = !ConexaoBancoDados::!RetornaInstancia();

// Obtém a instância de Conexão.

$b = !ConexaoBancoDados::!RetornaInstancia();

// Testa se os objetos são iguais.



if ($a ===$b)

{

echo '$a e $b são o mesmo objeto';

}

else

{

echo '$a e $b não são o mesmo objeto';

}

?>



Resultado:

Criando instancia

$a e $b são o mesmo objeto