Baixe o app para aproveitar ainda mais
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
Compartilhar