Singleton como padronização

Agosto 20, 2008 on 12:13 pm | In Informatica, php, Tutorial |

Apesar de Singleton ser utilizado como um Design Pattern ele é muito mais padrão ou uma metodologia a ser usada em qualquer linguagem para podermos criar instância única e mantelá como centro global de todo o objeto. Simplificando para phpnês, é uma instância única que será usada em comum por todo o projeto/sistema.

Imaginamos que você tenha a classe que acessa o banco de dados e neste caso do sistema somente irá necessitar de uso de um unico banco de dados; porque deveriamos instanciar uma nova classe de acesso ao banco se podemos utilizar sempre o mesmo acesso com a mesma conexão? É isso que o singleton permite você fazer, utilizar uma instância única e compartilhar ela com o sistema todo.

Vamos ao código (php4):

PHP:
  1. <span class="kw2" />class singleton{
  2.  
  3. var $Numero;
  4.  
  5. function singleton{
  6. $this->Numero = rand();
  7. }
  8.  
  9. function &getInstance(){
  10. static $instance;
  11.  
  12. if (!$instance){
  13. $instance = array( new singleton() );
  14. }
  15. return $instance[0];
  16. }
  17.  
  18. function showNumber(){
  19. echo 'Usando singleton = '. $this->Numero.'
  20. ';
  21. }
  22. }
  23.  
  24. $a = singleton::getInstance();
  25. $a->showNumber();
  26.  
  27. unset($a);
  28.  
  29. $a = singleton::getInstance();
  30. $a->showNumber();

No php5:

PHP:
  1. class singleton{
  2.  
  3. static private $instance = null;
  4. private function __construct(){
  5. }
  6.  
  7. static public function getInstance(){
  8. if (self::$instance == null){
  9. self::$instance = new singleton();
  10. }
  11. return self::$instance;
  12. }
  13. }
  14.  
  15. $obj = singleton::getInstance();

Simples né ? Faça alguns testes usando conexões diferentes, navegadores diferentes, em diferentes páginas e sistemas, até a próxima.


1 Comment »

RSS feed for comments on this post. TrackBack URI

  1. Estudei o Singleton na facul, este e outros padrões de projeto... observer, mvc, adapter, brigde, facade... Até que me lembrei de muitos, pensei que não me lembraria nem de 3. =D

    Comment by OiYes — Setembro 14, 2008 #

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>


 

 Assine o feed