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

5 comentários:

  1. Parabens hein paulo... singleton é tão simples e eu me confundindo

    ResponderExcluir
  2. Paulo, vejo muito potencial em suas explicações já pensou em escrever um livro? Fica a dica e obrigada pela clareza em suas explicações.

    ResponderExcluir
  3. Amigo me perdoe a sinceridade mas diferente dq as pessoas falam eu não acho seus posts claros não... como pessoas que mal entendem métodos estaticos ou classes abstratas podem entender polimorfismo ou ainda design patter saen entendendo o significado de uma instancia unica? acho meio problematico artigos assim pois isso atrapalha quem esta aprendendo.

    ResponderExcluir
  4. Em um comentário você me tirou uma dúvida de 2 anos acredita?

    Me refiro a linha 6 do primeiro codigo em que vc diz; // Um construtor privado; previne a criação direta do objeto

    Assim fica lógico que singleton é um pattern que pode ser utilizado em java, ruby ou qualquer outra linguagem.
    Parabéns pelo artigo de alto nível PAULO e diferente do comentário acima eu acho q blogs como o seu fortalecem o conhecimento no brasil, continue assim e não de bola para as críticas destrutivas abraço

    ResponderExcluir
  5. Classifico seu artigo como OBJETIVO tal como MVC está para organização, obrigado foi muito util para meus estudos

    ResponderExcluir