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\n"; 
     47 
     48self::$instancia = new !ConexaoBancoDados; 
     49 
     50} 
     51 
     52// retorna a instância criada. 
     53 
     54return self::$instancia; 
     55 
     56} 
     57 
     58} 
     59 
     60 
     61 
     62// Obtém a instância de Conexão. 
     63 
     64$a = !ConexaoBancoDados::!RetornaInstancia(); 
     65 
     66// Obtém a instância de Conexão. 
     67 
     68$b = !ConexaoBancoDados::!RetornaInstancia(); 
     69 
     70// Testa se os objetos são iguais. 
     71 
     72 
     73 
     74if ($a ===$b) 
     75 
     76{ 
     77 
     78echo '$a e $b são o mesmo objeto'; 
     79 
     80} 
     81 
     82else 
     83 
     84{ 
     85 
     86echo '$a e $b não são o mesmo objeto'; 
     87 
     88} 
     89 
     90?> 
     91 
     92 
     93 
     94Resultado: 
     95 
     96Criando instancia 
     97 
     98$a e $b são o mesmo objeto 
     99 
     100}}}