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

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

Singleton e Adapter Professor: Nazareno Andrade

Apresentações semelhantes


Apresentação em tema: "Singleton e Adapter Professor: Nazareno Andrade"— 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 Singleton

3 O que veremos hoje? Singleton (padrão de criaçã) Adapter (padrão estrutural) 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 A classe ConexãoBD dá acesso ao banco
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 Método getInstance() vs. inicialização estática
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


Carregar ppt "Singleton e Adapter Professor: Nazareno Andrade"

Apresentações semelhantes


Anúncios Google