Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouMiguel Violante Alterado mais de 10 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.