Ola,
tenho as seguinte classes (não totalmente implementadas para simplificar)
public interface SortList {
public void sort(List<Integer> list);
}
public class QuickSort implements SortList {
public QuickSort() {
}
@Override
public void sort(List<Integer> list) {
//quicksort acontece aqui...
}
}
public class BubbleSort implements SortList {
public BubbleSort() {
}
@Override
public void sort(List<Integer> list) {
bubbleSort(list);
}
public static void bubbleSort(List<Integer> list) {
// bubbleSort acontece aqui...
}
}
public class NullSort implements SortList {
@Override
public void sort(List<Integer> list) {
// Não faz nada
}
}
public class FactorySort {
public SortList getSort(String sortName) {
try {
if (Class.forName(sortName) != null) {
return (SortList) Class.forName(sortName).getConstructor(String.class).newInstance();
} else {
return new NullSort();
}
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
System.err.println(e);
System.out.println("Retornando um NullSort object");
return new NullSort();
}
}
}
public class Client {
public static void main(String args[]) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(30);
list.add(13);
list.add(11);
list.add(44);
list.add(3);
FactorySort factory = new FactorySort();
SortList ordernar = factory.getSort("MergeSort");
ordernar.sort(list);
ordernar = factory.getSort("br.com.schumaker.nogof.behavioral.nullobject.example2.QuickSort");
ordernar.sort(list);
ordernar = factory.getSort("QuickSort");
ordernar.sort(list);
ordernar = new QuickSort();
ordernar.sort(list);
}
}
Então, não consigo retornar o objeto certo a partir da FactorySort, mesmo passando o classe com o pacote inteiro como fazemos com as classe de conexão de banco de dados, alguma dica?
Grato,
HS