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)
<?php- class Exemplo{
- // Guarda uma instância da classe
- private static $instance;
- // Um construtor privado; previne a criação direta do objeto
- private function __construct()
- {
- echo 'Sou um construtor';
- }
- // O método singleton
- public static function singleton()
- {
- if (!isset(self::$instance)) {
- $c = __CLASS__;
- self::$instance = new $c;
- }
- return self::$instance;
- }
- // Método exemplo
- public function latir()
- {
- echo 'Au!';
- }
- // Previne que o usuário clone a instância
- public function __clone()
- {
- trigger_error('Clone is not allowed.', E_USER_ERROR);
- }
- }
- ?>
Isso permite que uma instância única de Exemplo seja recuperada.
<?php- // Isso falharia porque o construtor é privado
- $test = new Exemplo;
- // Isso sempre vai recuperar uma instância da classe
- $test = Exemplo::singleton();
- $test->latir();
- // Isso irá emitir um E_USER_ERROR.
- $test_clone = clone $test;
- ?>
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.
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
Parabens hein paulo... singleton é tão simples e eu me confundindo
ResponderExcluirPaulo, vejo muito potencial em suas explicações já pensou em escrever um livro? Fica a dica e obrigada pela clareza em suas explicações.
ResponderExcluirAmigo 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.
ResponderExcluirEm um comentário você me tirou uma dúvida de 2 anos acredita?
ResponderExcluirMe 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
Classifico seu artigo como OBJETIVO tal como MVC está para organização, obrigado foi muito util para meus estudos
ResponderExcluir