Mostrando postagens com marcador padrões. Mostrar todas as postagens
Mostrando postagens com marcador padrões. Mostrar todas as postagens

segunda-feira, 7 de novembro de 2011

Entenda Singleton

Olá tudo bem? Hoje vou falar sobre um assunto muito interessante para o desenvolvimento atual, vou falar sobre Singleton!


Mas espera ai... o que é singleton? Pesquisei no google e vi que Singleto é um whisky.....
Sério um WHISKY! Eita, em um blog assim eu vou ficar falando sobre bebidas? 
Não! Na verdade SINGLETON é uma palavra muito falada atualmente no desenvolvimento mas muitas pessoas não sabem nem a que se refere e as vezes até falam por ai Oo'...

Singleton é um padrão de desenvolvimento(os famosos Design Patterns) . Sabe? assim como o MVC, DAO... Lógico que não é igual ao MVC,DAO pois não é possível que alguém tenha criado o mesmo padrão duas vezes não acham? O Singleton é na verdade bem específico pois sua proposta é para garantir a existência de uma única instância de uma classe, permitindo um acesso global a esta instância.


Quando é necessário utilizar?
Muitos projetos necessitam de classes que sejam instanciadas apenas uma vez, por exemplo:
Classes de conexão com banco de dados, entre outras. veja um exemplo prático do php.net (fique ligado[a] nos comentários do código)





  1. <?php
  2. class Exemplo{
  3.     // Guarda uma instância da classe
  4.     private static $instance;
  5.    
  6.     // Um construtor privado; previne a criação direta do objeto
  7.     private function __construct()
  8.     {
  9.         echo 'Sou um construtor';
  10.     }
  11.     // O método singleton
  12.     public static function singleton()
  13.     {
  14.         if (!isset(self::$instance)) {
  15.             $c = __CLASS__;
  16.             self::$instance = new $c;
  17.         }
  18.         return self::$instance;
  19.     }
  20.    
  21.     // Método exemplo
  22.     public function latir()
  23.     {
  24.         echo 'Au!';
  25.     }
  26.     // Previne que o usuário clone a instância
  27.     public function __clone()
  28.     {
  29.         trigger_error('Clone is not allowed.', E_USER_ERROR);
  30.     }
  31. }
  32. ?>

Isso permite que uma instância única de Exemplo seja recuperada.


  1. <?php
  2. // Isso falharia porque o construtor é privado
  3. $test = new Exemplo;
  4. // Isso sempre vai recuperar uma instância da classe
  5. $test = Exemplo::singleton();
  6. $test->latir();
  7. // Isso irá emitir um E_USER_ERROR.
  8. $test_clone = clone $test;
  9. ?>



Conclusão

A utilização do pattern singleton permite uma facilidade maior no controle das classes que não devem ser instanciadas mais do que uma vez.
Normalmente uma classe singleton é utilizada em conjunto com uma classe factory que em breve eu irei explicar.


s-i-g-a-m-e @pv_fusion