Buscar

Padrão de Projeto Singleton

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Análise e Projeto de Sistemas II
Material das Aulas disponível no AVA
Aula 2
MSc. Karen Figueiredo – karen@ic.ufmt.br
Exemplos de Padrões
-Singleton-
Padrões de Projeto
2
 Categorias dos Padrões:
 Padrões de Criação
 Abstraem o processo de instanciação
 Tornam um sistema independente da forma como os objetos 
são criados, compostos e representados
Singleton
3
 Utilizado para criar objetos únicos para os quais só 
existe uma instância
 Motivação: Garantir que exista apenas um objeto 
instanciado de uma classe, independente do número 
de requisições para criá-lo.
 Você não deseja várias cópias do objeto nem seus 
valores expostos. Você quer garantir que cada objeto 
em sua aplicação esteja usando o mesmo recurso 
global.
 É o padrão mais simples (em termos do diagrama de 
classes)
Singleton
4
 Há muitos objetos dos quais precisamos apenas 
de um: grupos de linhas, caixas de diálogo, objetos 
que cuidam de preferências e configurações, objetos 
para registros, drivers de dispositivos, bancos etc.
 O que pode acontecer se instanciar o objeto mais de 
uma vez?
 Comportamento inadequado do programa
 Uso excessivo de recursos
 Resultados inconsistentes
Singleton
5
 Propósito:
 Assegurar o controle da quantidade de instâncias da 
classe
 Garantir um ponto de acesso global a ela (bem 
conhecido)
Singleton
6
 Como implementar um objeto único? (Java)
 Como criar um objeto?
Singleton
7
 Como implementar um objeto único? (Java)
 Como criar um objeto?
new MyClass();
Singleton
8
 Como implementar um objeto único? (Java)
 Como criar um objeto?
 Se outro objeto quisesse criar um MyClass? Poderia 
chamar new MyClass de novo?
new MyClass();
Singleton
9
 Como implementar um objeto único? (Java)
 Como criar um objeto?
 Se outro objeto quisesse criar um MyClass? Poderia 
chamar new MyClass de novo?
new MyClass();
Sim, claro.
Singleton
10
 Como implementar um objeto único? (Java)
 Como criar um objeto?
 Se outro objeto quisesse criar um MyClass? Poderia 
chamar new MyClass de novo?
 Então, se tivermos uma classe, sempre poderemos 
instanciá-la uma ou mais vezes?
new MyClass();
Sim, claro.
Singleton
11
 Como implementar um objeto único? (Java)
 Como criar um objeto?
 Se outro objeto quisesse criar um MyClass? Poderia 
chamar new MyClass de novo?
 Então, se tivermos uma classe, sempre poderemos 
instanciá-la uma ou mais vezes?
new MyClass();
Sim, claro.
Sim, mas apenas se for uma classe 
pública.
Singleton
12
 E se não for pública?
Singleton
13
 E se não for pública?
Apenas as classes do pacote 
poderão instanciá-la.
Singleton
14
 E se não for pública?
 Você sabia que o código abaixo é possível?
 O que ele significa?
Apenas as classes do pacote 
poderão instanciá-la.
public MyClass {
private MyClass() {
}
}
Singleton
15
 E agora existe algum objeto que possa instanciar a 
classe, usando o seu construtor?
public MyClass {
private MyClass() {
}
}
Singleton
16
 E agora existe algum objeto que possa instanciar a 
classe, usando o seu construtor?
A própria classe!
Mas isso faz sentido?
public MyClass {
private MyClass() {
}
}
Singleton
17
 Utilizamos um método estático getInstance() e 
retornamos a instância da classe
 Você não faz instâncias com o padrão Singleton, 
você pede para fazer!
public MyClass {
private MyClass() {}
public static MyClass getInstance() {
return new MyClass();
}
}
Singleton
18
 E agora como podemos criar um objeto MyClass?
public MyClass {
private MyClass() {}
public static MyClass getInstance() {
return new MyClass();
}
}
Singleton
19
 E agora como podemos criar um objeto MyClass?
MyClass.getInstance();
public MyClass {
private MyClass() {}
public static MyClass getInstance() {
return new MyClass();
}
}
Singleton
20
 Participantes do Padrão:
 Singleton
 Define a operação getInstance que permite que 
clientes acessem a instância única
 Define uma variável única uniqueInstance que irá 
guardar a instância
Singleton
21
 Implementação do Padrão (Java):
Singleton
22
A figura mostra um diagrama de sequências que representa o processo de criação de 
um singleton. Quando um objeto chama o singleton pela primeira vez, é realizada a 
instanciação da classe. Os demais acessos irão utilizar a instância já criada.
Exercício
23
1) Transforme a fábrica de chocolates em Singleton.
(Especificação no AVA)
Singleton
24
Trabalhando com segmentos...
Singleton
25
Ao adicionar a palavra sincronizada a 
getInstance(), forçamos todo 
segmento a esperar sua vez antes de 
poder inserir o método. Ou seja, dois 
segmentos não podem inserir o 
método ao mesmo tempo.
Singleton
26
O problema com o synchronized é que a 
sincronização é bastante dispendiosa. 
Estima-se que métodos sincronizados 
sejam cerca de cem vezes mais lentos que 
métodos não sincronizados. 
Singleton
27
 Como melhorar o trabalho com vários segmentos?
1. Não faça nada se o desempenho de getInstance() 
não for crítico para o seu aplicativo
2. Utilize uma instância criada rapidamente ao invés 
de uma criada lentamente
 A instância é criada quando a classe é carregada, então 
toda vez o objeto é retornado
Singleton
28
 Como melhorar o trabalho com vários segmentos?
Singleton
29
 Como melhorar o trabalho com vários segmentos?
3. Usando a trava duplamente verificada
 Primeiro verificamos se uma instância foi criada e, se 
não, então sincronizamos. 
 Assim sincronizamos apenas na primeira vez!
 Reduz drasticamente a sobrecarga!
Singleton
30
 Como melhorar o trabalho com vários segmentos?
Garante que vários segmentos lidem 
com a variável!
Singleton
31
 Consequências:
 Acesso controlado a instância única
 Espaço de nomes reduzido
 Uma classe, duas responsabilidades
 Gerenciar sua própria instância
 Realizar a função principal em seu aplicativo
Exercício
32
2) Transforme a fábrica de chocolate:
A- faça sincronização
B- utilize a criação rápida
C- utilize a trava duplamente verificada

Outros materiais