A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Singleton e Adapter Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Apresentações semelhantes


Apresentação em tema: "Singleton e Adapter Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)"— Transcrição da apresentação:

1 Singleton e Adapter Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

2 O que vimos na última aula? Factory Method Abstract Factory 2 Singleton

3 O que veremos hoje? Singleton (padrão de criaçã) Adapter (padrão estrutural) 3 Singleton

4 Problema-exemplo 1 Representar a configuração do sistema Timeout para mensagens Timeout para mensagens Diretório para arquivos temporários Diretório para arquivos temporários Queremos que só haja uma instância da configuração Queremos um ponto único de acesso a essa configuração

5 Outro exemplo Considere a seguinte arquitetura de sistema Vários módulos do sistema utilizam o mesmo BD Vários módulos do sistema utilizam o mesmo BD Você gerencia as operações sobre o BD Você gerencia as operações sobre o BD A classe ConexãoBD dá acesso ao banco A classe ConexãoBD dá acesso ao banco 5 Singleton módulo1 módulo2módulo3 módulo4 :ConexãoBD BD :ConexãoBD

6 E se você quiser garantir que haja apenas uma conexão para todos os módulos? Como garantir que haja apenas uma instância de ConexãoBD? Como garantir que haja apenas uma instância de ConexãoBD? 6 Singleton módulo1 módulo2módulo3 módulo4 :ConexãoBD BD ???

7 Solução toda estática Simples não é??!! Cria-se uma classe estática Métodos estáticos para acesso ao banco Métodos estáticos para acesso ao banco Atributos estáticos com informações de conexão Atributos estáticos com informações de conexão Algoritmos de conexão encapsulados em métodos estáticos... Algoritmos de conexão encapsulados em métodos estáticos... E por aí vai... E por aí vai... E a Orientação a objetos??? Onde é que fica??? Mudou a forma de conectar ao banco... mudaram as informações de configuração... Mudou a forma de conectar ao banco... mudaram as informações de configuração... Onde está a herança?!? Pois é amigo... não tem!!! Onde está a herança?!? Pois é amigo... não tem!!! 7 Singleton

8 Singleton Eis a solução... Padrão Singleton Intenção garantir que uma classe tenha somente uma instância, fornecendo um ponto global de acesso para a mesma garantir que uma classe tenha somente uma instância, fornecendo um ponto global de acesso para a mesmaAplicabilidade deve haver apenas uma instância de uma classe e essa instância deve dar acesso aos clientes através de um ponto bem conhecido deve haver apenas uma instância de uma classe e essa instância deve dar acesso aos clientes através de um ponto bem conhecido quando a única instância tiver de ser extensível através de subclasses, possibilitando aos clientes usarem uma instância estendida sem alterar o seu código quando a única instância tiver de ser extensível através de subclasses, possibilitando aos clientes usarem uma instância estendida sem alterar o seu código 8 Singleton

9 Singleton Como construir um Singleton??? Código Java (passo a passo) 1. Precisamos garantir que só haja uma instância, ou seja, temos que impedir que se faça new ConexaoBD(), mais de uma vez... Solução: protegemos o construtor! 9 Singleton public class ConexaoBD{ /* Construtor da classe */ protected ConexaoBD(){ //código do construtor... }

10 Singleton 2. Precisamos agora fornecer um método de acesso à instância única criada... este método deve ser estático Singleton public class ConexaoBD{ private static ConexaoBD instanciaUnica = null; /* Construtor da classe */ protected ConexaoBD(){...} /* Retorna a instância única */ public synchronized static ConexaoBD getInstance(){ if (instanciaUnica == null){ instanciaUnica = new ConexaoBD(); } return instanciaUnica; }

11 Singleton Conseqüências acesso controlado à instância única acesso controlado à instância única evita a poluição do código com inúmeras variáveis globais evita a poluição do código com inúmeras variáveis globais mais flexível do que métodos de classe mais flexível do que métodos de classe possibilita a herança possibilita a herança 11 Singleton

12 Singleton Vamos implementar o padrão Singleton Criar uma classe cliente para acessar o Singleton Criar uma classe cliente para acessar o Singleton Verificar se realmente apenas uma instância foi criada... Verificar se realmente apenas uma instância foi criada... Recuperar a instância Recuperar a instância Alterar um valor de atributo Alterar um valor de atributo Recuperar novamente a instância Recuperar novamente a instância Verificar se o valor foi alterado Verificar se o valor foi alterado Tentar criar uma instância, em outra classe, utilizando o operador new Tentar criar uma instância, em outra classe, utilizando o operador new E se o construtor fosse privado? E se o construtor fosse privado? 12 Singleton

13 Implementação: Método getInstance() vs. inicialização estática Método getInstance() vs. inicialização estática Problemas semelhantes a variáveis globais Problemas semelhantes a variáveis globais Diferença de construtor privado vs. protected Diferença de construtor privado vs. protected Opção: classe abstrata com getInstance() que escolhe subclasse a ser instanciada (ex: java.awt.Toolkit) Opção: classe abstrata com getInstance() que escolhe subclasse a ser instanciada (ex: java.awt.Toolkit) Bom exemplo: java.lang.Runtime (tem addShutdownHook(), getNumberOfProcessors,...) Fachadas geralmente são Singletons 13 Singleton

14 Problema-exemplo 2: Temos uma classe que formata séries de números para mostrar na interface Queremos filtrar objetos de classes nossas e legadas/de terceiros Como adaptar classes que possuem implementação que queremos à interface que precisamos?

15 Problema exemplo 3: Uma interface gráfica baseada em eventos espera ActionListeners. Não queremos que nossas classes da lógica implementem essa interface

16 16 Adapter e Façade Adapter Conseqüências O cliente e a classe adaptada se mantêm independentes um do outro O cliente e a classe adaptada se mantêm independentes um do outro Você limpa classes que são de propósito geral (diminui o número de interfaces implementadas) Você limpa classes que são de propósito geral (diminui o número de interfaces implementadas) Dificulta o entendimento (introduz um nível de indireção) Dificulta o entendimento (introduz um nível de indireção)

17 17 Adapter e Façade Adapter Aplicabilidade É necessário usar uma classe que invoca um método através de uma interface, mas você quer usá-lo com uma classe que não implementa tal interface É necessário usar uma classe que invoca um método através de uma interface, mas você quer usá-lo com uma classe que não implementa tal interface Você não tem o código fonte da classe Você não tem o código fonte da classe A classe é de propósito geral e você não quer fazê-la implementar a interface A classe é de propósito geral e você não quer fazê-la implementar a interface

18 O que vimos hoje? SingletonAdapter 18 Singleton

19 Dúvidas? ? 19 Singleton


Carregar ppt "Singleton e Adapter Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)"

Apresentações semelhantes


Anúncios Google