1 / 19

Singleton e Adapter

Singleton e Adapter. Professor: Nazareno Andrade ( baseado no material de Hyggo Almeida e Jacques Sauvé). O que vimos na última aula ?. Factory Method Abstract Factory. O que veremos hoje ?. Singleton ( padrão de criaçã ) Adapter ( padrão estrutural ). Problema-exemplo 1.

jean
Download Presentation

Singleton e Adapter

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 Singleton

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

  4. Problema-exemplo 1 • Representar a configuração do sistema • Timeout para mensagens • 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 • Você gerencia as operações sobre o BD • A classe ConexãoBD dá acesso ao banco módulo2 módulo3 módulo1 módulo4 :ConexãoBD :ConexãoBD :ConexãoBD :ConexãoBD BD Singleton

  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? módulo2 módulo3 módulo1 módulo4 :ConexãoBD ??? BD Singleton

  7. Solução toda estática • Simples não é??!! Cria-se uma classe estática • Métodos estáticos para acesso ao banco • Atributos estáticos com informações de conexão • Algoritmos de conexão encapsulados em métodos estáticos... • 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... • Onde está a herança?!? Pois é amigo... não tem!!! 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 • Aplicabilidade • 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 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! • public class ConexaoBD{ • /* Construtor da classe */ • protected ConexaoBD(){ • //código do construtor... • } • } Singleton

  10. Singleton 2. Precisamos agora fornecer um método de acesso à instância única criada... este método deve ser estático... • 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; • } • } Singleton

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

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

  13. Implementação: • Método getInstance() vs. inicialização estática • Problemas semelhantes a variáveis globais • Diferença de construtor privado vs. protected • 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 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. Adapter • Conseqüências • 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) • Dificulta o entendimento (introduz um nível de indireção) Adapter e Façade

  17. 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 • 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 Adapter e Façade

  18. O que vimos hoje? • Singleton • Adapter Singleton

  19. Dúvidas? ? Singleton

More Related