Trabalho Design pattern

346 views

Published on

Trabalho Design pattern
Factory Method
Strategy
DocumentFactory
Singleton

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
346
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Trabalho Design pattern

  1. 1. SISTEMAS DE INFORMAÇÃO DEIVISON SILVEIRA JOSE RILDO ROCHA LESSA ERIVAN DE SENA RAMOSSISTEMAS ORIENTADOS A OBJETOS II TRABALHO AV II FORTALEZA 2007
  2. 2. FACULDADE INTEGRADA DO CEARÁ Sistemas Orientados a Objetos II - 2º Trabalho Professor: Jorge Bérgson Alunos : Deivison Silveira, Rildo Lessa, Erivan Sena1) [0,5 pontos] Implemente o padrão Factory Method para criar objetos da aplicação abaixo: A implementação deve conter todas as classes do diagrama acima. O método obterDocumento (é o método factory) recebe como parâmetro o tipo de documento a ser retornado (docTipo), cria um objeto de uma das subclasses de documento e retorna o mesmo como um objeto do tipo Documento. Caso o tipo especificado não case com nenhum das subclasses, o objeto a ser retornado deve ser um objeto (próprio) da classe Documento. A classe TesteFactory deve conter o método main e deve criar cada um dos 3 objetos. public class Documento { private String nome; public Documento(){ this.nome = "Objeto Documento"; } public String getTipoObjeto(){ return this.nome; } public void setNome(String nome){ this.nome = nome; } } public class DocumentoFactory { public Documento obterDocumento(int docTipo){ Documento objDocumento; switch (docTipo){ case 1: //Instancia o Objeto Relatório objDocumento = new Relatorio(); break; case 2: //Instancia o Objeto Resumo objDocumento = new Resumo(); break; case 3: 1
  3. 3. //Instancia o Objeto Edital objDocumento = new Edital(); break; default: //Instancia o Objeto Documento objDocumento = new Documento(); break; } return objDocumento; }}public class Edital extends Documento{ public Edital(){ super.setNome("Objeto Edital"); } public String getTipoObjeto(){ return super.getTipoObjeto(); }}public class Relatorio extends Documento{ public Relatorio(){ super.setNome("Objeto Relatorio"); } public String getTipoObjeto(){ return super.getTipoObjeto(); }}public class Resumo extends Documento { public Resumo(){ super.setNome("Objeto Resumo"); } public String getTipoObjeto(){ return super.getTipoObjeto(); }}public class TesteFactoryDoc { public static void main(String[] args) { DocumentoFactory objDocumentoFactory = new DocumentoFactory(); Documento DocumentoRelatorio = objDocumentoFactory.obterDocumento(1); System.out.println(DocumentoRelatorio.getTipoObjeto()); Documento DocumentoResumo = objDocumentoFactory.obterDocumento(2); System.out.println(DocumentoResumo.getTipoObjeto()); Documento DocumentoEdital = objDocumentoFactory.obterDocumento(3); System.out.println(DocumentoEdital.getTipoObjeto()); Documento DocumentoDefault = objDocumentoFactory.obterDocumento(4); System.out.println(DocumentoDefault.getTipoObjeto()); }} 2
  4. 4. 2) [0,7 pontos] Implemente a classe DocumentoFactory como um Singleton.public class Documento { private String nome; public Documento(){ this.nome = "Objeto Documento"; } public String getTipoObjeto(){ return this.nome; } public void setNome(String nome){ this.nome = nome; }}import com.sun.org.apache.xalan.internal.xsltc.dom.SimpleResultTreeImpl.SingletonIterator;public class DocumentoFactory { private static DocumentoFactory instancia = null; public static DocumentoFactory obterInstancia(){ if (instancia == null){ instancia = new DocumentoFactory(); } return instancia; } private DocumentoFactory() { } public Documento obterDocumento(int docTipo){ Documento objDocumento; switch (docTipo){ case 1: //Instancia o Objeto Relatório objDocumento = new Relatorio(); break; case 2: //Instancia o Objeto Resumo objDocumento = new Resumo(); break; case 3: //Instancia o Objeto Edital objDocumento = new Edital(); break; default: //Instancia o Objeto Documento objDocumento = new Documento(); break; } return objDocumento; }} 3
  5. 5. public class Edital extends Documento{ public Edital(){ super.setNome("Objeto Edital"); } public String getTipoObjeto(){ return super.getTipoObjeto(); }}public class Relatorio extends Documento{ public Relatorio(){ super.setNome("Objeto Relatorio"); } public String getTipoObjeto(){ return super.getTipoObjeto(); }}public class Resumo extends Documento { public Resumo(){ super.setNome("Objeto Resumo"); } public String getTipoObjeto(){ return super.getTipoObjeto(); }}public class TesteFactoryDoc { public static void main(String[] args) { DocumentoFactory objDocumentoFactory = DocumentoFactory.obterInstancia(); Documento DocumentoRelatorio = objDocumentoFactory.obterDocumento(1); System.out.println(DocumentoRelatorio.getTipoObjeto()); Documento DocumentoResumo = objDocumentoFactory.obterDocumento(2); System.out.println(DocumentoResumo.getTipoObjeto()); Documento DocumentoEdital = objDocumentoFactory.obterDocumento(3); System.out.println(DocumentoEdital.getTipoObjeto()); Documento DocumentoDefault = objDocumentoFactory.obterDocumento(4); System.out.println(DocumentoDefault.getTipoObjeto()); }} 4
  6. 6. 3) [0,8 pontos] Implemente o padrão Strategy para que uma classe Cliente possa ordenar um vetor de acordo com os seguintes critérios: Método de Ordenação Quando Aplicar Seleção N < 100 Inserção 100 =< N < 1.000 QuickSort N >= 1.000public class EstrategiaOrdenacao { private Ordenacao pobjOrdenador = null; public void ContextoOrdenacao(int[] alstValores){ if (alstValores.length < 100){ pobjOrdenador = new OrdenacaoSelectionSort(); } else if (alstValores.length >= 100 && alstValores.length < 1000) { pobjOrdenador = new OrdenacaoInsertionSort(); } else if (alstValores.length >= 1000) { pobjOrdenador = new OrdenacaoQuickSort(); } } public int[] Ordenar(int[] alstValores){ return pobjOrdenador.Ordenar(alstValores); }}public interface Ordenacao { int[] Ordenar(int[] alstValores);}public interface Ordenador { void Ordenar(int[] alstValores);}public class OrdenacaoInsertionSort implements Ordenacao { public int[] Ordenar (int[] alstValores) { int aux; for (int i=0; i < alstValores.length; i++){ for (int j=1; j < (alstValores.length-i); j++){ if (alstValores[j-1]>alstValores[j]){ aux = alstValores[j]; alstValores[j] = alstValores[j-1]; alstValores[j-1]=aux; } } } return alstValores; }} 5
  7. 7. import java.util.Random;public class OrdenacaoQuickSort implements Ordenacao { private static long comparisons = 0; private static long exchanges = 0; public static int[] quicksort(int[] a) { shuffle(a); // to guard against worst-case quicksort(a, 0, a.length - 1); return a; } public static void quicksort(int[] a, int left, int right) { if (right <= left) return; int i = partition(a, left, right); quicksort(a, left, i-1); quicksort(a, i+1, right); } private static int partition(int[] a, int left, int right) { int i = left - 1; int j = right; while (true) { while (less(a[++i], a[right])) // find item on left to swap ; // a[right] acts as sentinel while (less(a[right], a[--j])) // find item on right to swap if (j == left) break; // dont go out-of-bounds if (i >= j) break; // check if pointers cross exch(a, i, j); // swap two elements into place } exch(a, i, right); // swap with partition element return i; } // is x < y ? private static boolean less(double x, double y) { comparisons++; return (x < y); } // exchange a[i] and a[j] private static void exch(int[] a, int i, int j) { exchanges++; int swap = a[i]; a[i] = a[j]; a[j] = swap; } // shuffle the array a private static void shuffle(int[] a) { int N = a.length; for (int i = 0; i < N; i++) { int r = i + (int) (Math.random() * (N-i)); // between i and N-1 exch(a, i, r); } } public int[] Ordenar (int[] alstValores) { return quicksort(alstValores); }} 6
  8. 8. public class OrdenacaoSelectionSort implements Ordenacao{ public int[] Ordenar(int alstValores[]) { for (int i = 0; i < alstValores.length - 1; i++ ) { int minIndex = i; // index of min value int min = alstValores[minIndex]; // min value // Find the minimum value in the unsorted part of the array. for ( int j = i + 1; j < alstValores.length; j++ ) { // If this element is less than min it becomes the min. if ( alstValores[j] < min ) { minIndex = j; min = alstValores[minIndex]; } } int T = alstValores[minIndex]; alstValores[minIndex] = alstValores[i]; alstValores[i] = T; } return alstValores; }}public class TesteStrategy { public static int[] vetorRandomico(int aintTamanho){ int llstValores[] = new int[aintTamanho]; for(int i = 0; i < aintTamanho; i++){ llstValores[i] = (int)(Math.random() * 10); } return llstValores; } public static void imprimeValores(int[] alstValores){ System.out.println("-------------------------------------"); for(int i = 0; i < alstValores.length; i++){ System.out.print(alstValores[i] + "-"); } System.out.println(); System.out.println("-------------------------------------"); } public static void main(String[] args) { EstrategiaOrdenacao lobjEstrategiaOrdenacao = new EstrategiaOrdenacao(); int llstValores[] = vetorRandomico(50); System.out.println("Vetor Randômico:"); imprimeValores(llstValores); lobjEstrategiaOrdenacao.ContextoOrdenacao(llstValores); lobjEstrategiaOrdenacao.Ordenar(llstValores); System.out.println("Vetor Ordenado:"); imprimeValores(llstValores); }} 7

×