Changes between Initial Version and Version 1 of WF/Singleton


Ignore:
Timestamp:
07/24/07 15:01:40 (17 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • WF/Singleton

    v1 v1  
     1Propriedades 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. 
     2 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. 
     3 
     4 
     5 
     6{{{ 
     7 
     81. Classe para conexões ao Banco de Dados 
     9 
     10 
     11 
     12class !ConexaoBancoDados 
     13 
     14{ 
     15 
     16// propriedade estática que armazenará 
     17 
     18// a instância única. 
     19 
     20private static $instancia = null; 
     21 
     22 
     23 
     24// Método construtor qualquer 
     25 
     26private function __construct() {} 
     27 
     28 
     29 
     30// Método para obter a instância 
     31 
     32public static function !RetornaInstancia () 
     33 
     34{ 
     35 
     36// caso não exista a instância 
     37 
     38// instancia [primeira vez] 
     39 
     40if (self::$instancia == null) 
     41 
     42{ 
     43 
     44// instancia objeto 
     45 
     46echo "Criando instancia 
     47"; 
     48 
     49self::$instancia = new !ConexaoBancoDados; 
     50 
     51} 
     52 
     53// retorna a instância criada. 
     54 
     55return self::$instancia; 
     56 
     57} 
     58 
     59} 
     60 
     61 
     62 
     63// Obtém a instância de Conexão. 
     64 
     65$a = !ConexaoBancoDados::!RetornaInstancia(); 
     66 
     67// Obtém a instância de Conexão. 
     68 
     69$b = !ConexaoBancoDados::!RetornaInstancia(); 
     70 
     71// Testa se os objetos são iguais. 
     72 
     73 
     74 
     75if ($a ===$b) 
     76 
     77{ 
     78 
     79echo '$a e $b são o mesmo objeto'; 
     80 
     81} 
     82 
     83else 
     84 
     85{ 
     86 
     87echo '$a e $b não são o mesmo objeto'; 
     88 
     89} 
     90 
     91?> 
     92 
     93 
     94 
     95Resultado: 
     96 
     97Criando instancia 
     98 
     99$a e $b são o mesmo objeto 
     100 
     101}}}