Buscar

ecot02-08b-pesoMosca

Prévia do material em texto

Padrão Padrão 
Peso MoscaPeso Mosca
Prof. Dr. Enzo Seraphim
Definições
Modelo
Exemplo
Aplicações
Definição
Usar compartilhamento para suportar grandes 
quantidades de objetos refinados 
eficientemente [Eric Gama]
Objetivos
Aplicação usa grande quantidade de objetos
– Não depende de identidade de objetos
Sem compartilhamento de objetos haveria alto 
custo de armazenamento em memória
Gerenciamento String
Operador (=) em Java usa do padrão Cadeira de 
Responsabilidade para compartilhar (não repetir) 
Strings na memória.
Construtor (new) de cópia não compartilha
public class App {
public static void main(String[] args) {
 String s1 = "padrões de projeto";
 String s2 = "padrões de projeto";
 String s3 = new String("padrões de projeto");
 System.out.println(s1.equals(s2));//mesmo valor
 System.out.println(s1.equals(s3));//mesmo valor
 System.out.println(s1==s2);//mesmo endereço
 System.out.println(s1==s3);//diferente endereço
} }
5º Princípio OO
 “Não faça sobregarrega de
operadores, use método para 
representar a ação.”
Um símbolo tem pouco significado para 
representar uma ação, veja exemplo: 
Aluno a = new Aluno();
a++;
Java não permite sobrecargar 44 operadores
Exceções String, operadores sobrecarregados:
operador = é um construtor
operador + concatena duas String
Prof. Dr. Enzo Seraphim
Definições
Modelo
Exemplo
Aplicações
Padrão Padrão 
Peso MoscaPeso Mosca
Padrão Peso Mosca
Centraliza a responsabilidade em objetos 
compartilhados de alta granularidade
PesoMosca
Define operação que será implentada pelas 
classes Compartilhado e NaoCompartilhado
Cliente conhece o que é mutável (parâmetro) 
para invocar a operação
Classe Abstrata ou Interface(puramente abstrata)
Compartilha
Para o padrão imutável é uma chave única
– Anteriormente imutável repetiria
Cliente usam várias referências que apontar 
sempre para o mesmo objeto com chave única
 Somente Fabrica deveria criar seus objetos
 Java: protected torna pública para classes pacote
Operação: parâmentro mutável conhecido Cliente
6º Princípio OO
 “Não violarás a visibilidade de 
métodos ou atributo em vão usando de amizade”
Uso do modificador friend que concede acesso 
superior ao encapsulado pela classe é proibitivo 
para Orientação Objetos (Engenharia Software)
Uma exceção permitida é determinar quais classe 
devem ter acesso ao construtor de outra classe
Java não criou o modificado friend, mas 
modificador protected estende visibilidade 
publica para todas classes que estão no pacote
NaoCompartilha
Referencias de objetos desta classe não serão 
compartilhadas
Qualquer objeto pode criar suas instâncias
Operação: parâmentro mutável conhecido Cliente
FabricaCompartilha
Única capaz instanciar objetos compartilha
Verifica existência da chave em um hash
– Já existe: retorna a referência
– Não existe:cria,insere hash e retorna referência
Cliente
Cliente armazena o valor mutável das instâncias 
da subclasses do PesoMosca
– Não pode ser alto custo de armazenamento
Referencia Fábrica e os vários PesoMoscas 
Cliente é uma classe de negócio (ou classe de 
aplicação) que usa operação de algum sujeito
Prof. Dr. Enzo Seraphim
Definições
Modelo
Exemplo
Aplicações
Padrão Padrão 
Peso MoscaPeso Mosca
Redação usa vários termos
– Referências à números não são compartilhados
– Referências à palavras são compartilhas 
Fábrica garante que palavras não ser repetirão
Característica mutável: Inicio de cada Frase 
public interface Termo {
 public void exibir(boolean inicio);
}
public class Palavra implements Termo {
 private String letras;
 protected Palavra() {}
 @Override
 public void exibir(boolean inicio) {
 if (inicio) {
 System.out.print(". "+Character.toUpperCase(
 letras.charAt(0)) + letras.substring(1));
 } else {
 System.out.print(" "+ letras); } }
//gets e sets
}
public class Numero implements Termo{
 private double valor;
 @Override
 public void exibir(boolean inicio) {
 if (inicio) {
 System.out.print(". " + valor);
 } else {
 System.out.print(" " + valor); } }
//gets e sets
}
public class FabricaPalavra {
 private HashMap<String, Palavra> palavras = 
 new HashMap<>();
 public Palavra getPalavra(String v) {
 Palavra p = palavras.get(v);
 if(p==null) {
 p=new Palavra();
 p.setLetras(v);
 palavras.put(v, p); }
 return p; }
//gets e sets
}
public class Redacao {
private String titulo;
private FabricaPalavra fabrica=
 new FabricaPalavra();
private List<Integer> inicios=new ArrayList<>();
private List<Termo> termos=new ArrayList<>();
public void mostrar() { int i=0; int pos=0;
 for (Termo t : termos) {
 t.exibir(i==inicios.get(pos));
 i++;
 if(i>inicios.get(pos)) {pos++;} } }
public void novaFrase(String f) {
 String v[] = f.split(" ");
 if(inicios.size()==0){inicios.add(v.length);
 }else {inicios.add(inicios.get(
 inicios.size()-1)+v.length);
 for (int i = 0; i < v.length; i++) {
 try {
 double d = Double.parseDouble(v[i]);
 Numero n = new Numero(); n.setValor(d);
 termos.add(n);
 }catch(NumberFormatException ex){
 termos.add(fabrica.getPalavra(v[i]));}}}}
public class App {
 public static void main(String[] args) {
 //Vou-me embora pra Pasárgada Manuel Bandeira
 Redacao r = new Redacao();
 r.novaFrase("Vou-me embora pra Pasárgada");
 r.novaFrase("Lá sou amigo do rei");
 r.novaFrase("Lá tenho a mulher que eu quero");
 r.novaFrase("Na cama que escolherei");
 r.novaFrase("Vou-me embora pra Pasárgada");
 r.mostrar();
 System.out.println();
 System.out.println("palavras="+
 r.getFabrica().getPalavras().size());
 }
}
Prof. Dr. Enzo Seraphim
Definições
Modelo
Exemplo
Aplicações
Padrão Padrão 
Peso MoscaPeso Mosca
Aplicação
Quando objetos podem ser usados em diferentes 
contextos ao mesmo tempo (agindo sempre como 
um objeto indepentente).
Quando grandes grupos de objetos podem ser 
substituídos por poucos objetos compartilhados 
separando o estado mutável do imutável.
Quando não depende da identidade dos objetos.
Prof.Dr.Enzo Seraphim
seraphim@unifei.edu.br
IESTI/UNIFEI
Padrão Padrão 
Peso MoscaPeso Mosca
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18
	Slide 19
	Slide 20
	Slide 21
	Slide 22
	Slide 23
	Slide 24
	Slide 25
	Slide 26
	Slide 27
	Slide 28
	Slide 29
	Slide 30

Continue navegando