PHP Patterns parte 1: Singleton

Posted on agosto 3, 2010. Filed under: PHP |

Situação:

Em determinadas situações no desenvolvimento de nossa aplicação precisamos que um ou mais recursos criados uma única vez sejam compartilhados ficando disponíveis em todo o ciclo da aplicação. Um exemplo bem comum na utilização do pattern Singleton é o objeto de conexão com o banco de dados. Geralmente o objeto é criado quando a aplicação é chamada e destruída quando a aplicação termina. Você não precisa criar o objeto de conexão com o banco em todos os lugares que precisa dele, isso enquanto a aplicação estiver sendo executada. Ao invés disso a idéia é que possamos reutilizar a conexão que já foi estabilizada anteriormente.

Solução:

Quando você precisa de uma instância exclusiva de uma classe, como no caso da conexão com o banco de dados, podemos utilizar um pattern chamado Singleton. Uma classe baseado no pattern Singleton, inicializa uma instância da classe desejada e à disponibiliza através de um método statico tipicamente chamado de getInstance(). O mesmo objeto será retornado toda vez que solicitado. O objeto será criado uma única vez.

Implementar o Singleton no PHP 5 é muito simples. Segue abaixo o código de implementação do pattern Singleton.

<php
class DB {
  private static $instance = false;

  private function __construct() {}

  public static function getInstance() {
    if (false === DB::$instance) {
      DB::$instance = new DB;
    }
    return DB::$instance;
  }
}

$db = DB::getInstance();
$db->query("SELECT * FROM tabela");

Primeiramente definimos uma propriedade privada onde será armazenado o objeto único.
private static $instance = false;

Criamos um constrtutor da classe privado e sem corpo. Dessa forma, impedimos que a classe seja instanciada diretamente. A idéia aqui é forçar o programador a usar o método getInstance() que é declarado de forma estática.
private function __construct() {}

Finalmente implementamos o método estático getInstance() que irá nos retornar o objeto armazenado na propriedade $instance. Na primeira chamada ao método, o objeto DB será criado. Nas chamadas seguintes, o método retorna o objeto já criado anteriormente:
public static function getInstance() {
  if (false === DB::$instance) {
    DB::$instance = new DB;
  }
  return DB::$instance;
}

Utilizando a classe baseado no pattern Singleton:
$db = DB::getInstance();
$db->query("SELECT * FROM tabela");

Make a Comment

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Uma resposta to “PHP Patterns parte 1: Singleton”

RSS Feed for Pasqua Tecnologia Comments RSS Feed

Gostei muito da forma didática que você está ensinando os Designs Patterns. Show!!!!


Where's The Comment Form?

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: