Upload
erivan-ramos
View
362
Download
2
Embed Size (px)
DESCRIPTION
Trabalho Design pattern Factory Method Strategy DocumentFactory Singleton
Citation preview
SISTEMAS DE INFORMAÇÃODEIVISON SILVEIRA
JOSE RILDO ROCHA LESSAERIVAN DE SENA RAMOS
SISTEMAS ORIENTADOS A OBJETOS II
TRABALHO AV II
FORTALEZA2007
FACULDADE INTEGRADA DO CEARÁSistemas Orientados a Objetos II - 2º TrabalhoProfessor: Jorge Bérgson
Alunos : Deivison Silveira, Rildo Lessa, Erivan Sena
1) [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órioobjDocumento = new Relatorio();break;
case 2://Instancia o Objeto ResumoobjDocumento = new Resumo();
1
break;case 3:
//Instancia o Objeto EditalobjDocumento = new Edital();break;
default://Instancia o Objeto DocumentoobjDocumento = 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
}
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órioobjDocumento = new Relatorio();break;
case 2://Instancia o Objeto ResumoobjDocumento = new Resumo();break;
case 3://Instancia o Objeto EditalobjDocumento = new Edital();break;
default://Instancia o Objeto DocumentoobjDocumento = new Documento();break;
}return objDocumento;
}}
3
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
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 < 100Inserção 100 =< N < 1.000QuickSort N >= 1.000
public 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
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; // don't 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
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