Buscar

Questões teóricas Singleton e Adapter

Prévia do material em texto

Padrão Singleton: 
 
Questão 1: 
Padrão de criação que garante que uma classe tenha apenas uma instância e que forneça 
um ponto global de acesso a si mesma. É utilizado quando é necessário um ponto único 
para criação de uma instância de classe e quando precisamos de apenas uma instância de 
uma classe. 
 
UML: 
 
Singleton deve sempre ter um construtor privado. 
getInstance() é static, assim sendo possível que outras classes possam acessá­la. 
uniqueInstance possui a única instância de Singleton. 
 
As três soluções para evitar que sua classe Singleton tenha problemas são: 
 
1° ­ Declarando o getInstance() da classe como synchronized.  
2° ­ Eager initialization ou inicialização apressada. 
3° ­ Trava duplamente verificada. 
 
Vantagens/Desvantagens: 
 
1° ­ Sincronizando o getInstance() pode diminuir o desempenho do programa por um fator 
de 100. Se o desempenho de getInstance() não for crítico para o seu aplicativo, essa pode 
ser uma boa saída. 
 
2° ­ Útil se você sabe que seu programa sempre cria e usa uma instância Singleton. 
Inicializador estático é executado quando a classe inicializa após o seu carregamento, mas 
antes que a classe possa ser usada por qualquer divisão; Não tem necessidade de 
sincronizar o método getInstance() o que significa que as threads verão a mesma instância 
e o locking não é requerido. Você não tem o controle de qual o exato momento que o objeto 
foi criado. É de imediato a resolução dos problemas das threads. 
 
3° ­ Reduzir o uso da sincronização do getInstance().  
Garante que várias threads lidem com a variável uniqueInstance corretamente. 
 
 
 
 
Questão 2: 
 
b) Para garantir que diferentes threads não passassem, utilizei a eager initialization, me foi 
útil já que eu queria que fosse criado apenas uma única instância, é uma solução imediata a 
resolução de problemas com threads, a desvantagem é que não se tem controle do exato 
momento em que o objeto foi criado. 
 
Padrão Adapter: 
 
Questão 3: 
 
Padrão do tipo estrutural que converte a interface de uma classe para outra interface que o 
cliente espera encontrar. Usado quando tem a necessidade de adaptar interfaces 
incompatíveis para que possam trabalhar juntas.O padrão Adapter possui dois modelos de 
implementação: Object Adapter que utiliza composição e o Class Adapter que utiliza 
herança de classes + interfaces. 
 
UML Object Adapter: 
 
 
 
 
 
 
UML Class Adapter: 
 
 
Questão 3 ­ D 
Entre o Object Adapter e Class Adapter, a mais poderosa é o Object Adapter, já que usa 
composição, ela pode se comunicar com mais de um objeto. 
 
Questão 5 ­ C 
Respeitam o principio aberto/fechado por que não houve alteração no código original, 
apenas extensões foram feitas para se adaptar ao código, assim atendendo aos princípios 
aberto para extensões e fechado para modificações.

Continue navegando