wpjr2’s Weblog

Artigos e tutoriais úteis

Padrão de Desenho Singleton

Posted by wpjr2 em abril 14, 2008

Gostaria de estar explicando melhor o padrão de projetos Singleton.
Este tópico está relacionado a dois exercícios do capítulo 3 da apostila.

Imaginem a seguinte situação:

Para um sistema bancário, nós teríamos contas bancárias, correntistas,
bancos e teriamos somente um banco central para auditar todas as
movimentações bancárias sendo feitas pelos bancos. Neste caso, seria
possivel somente UM objeto do tipo BancoCentral no sistema, que
estaria se relacionando com os demais bancos no mercado financeiro.

Um exemplo de classe utilizando Singleton pode ser implementado da
seguinte forma:

==============================

======================================

/**
* classe que representa o banco central
* @author wpjr
*
*/
public class BancoCentral {

/**
* a instância única do banco central no sistema
*/
private static BancoCentral instancia;

/**
* metodo que retorna o objeto do tipo BancoCentral
* do sistema
* @return banco central
*/
public static BancoCentral getInstance()
{
if (instancia == null)
{
instancia = new BancoCentral();
}
return instancia;
}

}

======================================================

As características que fazem esta classe possuir um objeto singleton:
a) atributo static: atributo pertence a classe e não ao objeto, sendo
compartilhado por todos os objetos que precisam acessá-lo.
b) construtor privado: desta forma não se pode construir objetos novos
do tipo BancoCentral. A única maneira de se construir um objeto do
tipo BancoCentral é através do método público e estático
getInstance(), que sempre retornará a mesma instância da classe.
c) método público e estático para obter a instância da classe:
conforme dito acima, este método é a única maneira de se obter uma
instãncia do tipo BancoCentral.

Suponha agora o seguinte código abaixo que tenta criar objetos do tipo
BancoCentral:

=======================================================

public static void main(String[] args) {

BancoCentral bc1 = BancoCentral.getInstance();
BancoCentral bc2 = BancoCentral.getInstance();
}

=======================================================

No exemplo acima, tenta-se obter dois objetos do tipo BancoCentral.
Mas devido ao fato desta classe ser Singleton, as variáveis bc1 e bc2
terão acesso ao mesmo objeto em memória. A única diferença na execução
acíma é que na primeira chamada, o objeto do tipo BancoCentral será
instanciado (instancia == null), e na segunda chamada o objeto
singleton já existe em memória. Temos assim o padrão Singleton
implementado no sistema.

Deixe uma resposta

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 )

Imagem do Twitter

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

Foto do Facebook

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

Foto do Google+

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

Conectando a %s

 
%d blogueiros gostam disto: