如果我想用所有这些类中常见的void sort()
方法编写一堆排序类(插入,合并等),那么我希望有一个这些类可以实现的接口或抽象类,或者延伸自。
但是,如果我打算将sort方法用作静态,并且不能在抽象超类中保留静态方法。
这种实施的正确方法是什么?
答案 0 :(得分:1)
嗯,我认为你正试图让它变得复杂。你的问题很简单。您只需要编写一些排序函数。你不能尝试在任何地方应用面向对象的思想。这只是不同可重用算法的实现。如果你真的需要设计这个。你可以这样试试:
interface Sorter<T> {
// This method accepts any type of object and sorts it and return it in sorted order
//Used Generics to support all types. You can read T as List or Array if you want to understand it in a simple way
public T sort(T t);
}
class MergeSort implements Sorter<int[]> {
@Override
public int[] sort(int[] numbersToSort) {
//algorithm goes here
}
}
class BubbleSort implements Sorter<int[]> {
@Override
public int[] sort(int[] numbersToSort) {
//algorithm goes here
}
}
class InsertionSort implements Sorter<int[]> {
@Override
public int[] sort(int[] numbersToSort) {
//algorithm goes here
}
}
enum SortingAlgorithms{
INSERTIONSORT,
BUBBLESORT,
MERGESORT;
}
class SorterFactory {
public static Sorter<int[]> getSortingAlgorithm(SortingAlgorithms alg) {
switch(alg) {
case INSERTIONSORT :
return new InsertionSort();
case BUBBLESORT :
return new BubbleSort();
case MERGESORT :
return new MergeSort();
default:
return new BubbleSort();
}
}
}
public class SortingExecutor {
public static void main (String... cmdArgs) {
int[] toBeSorted = {6, 7, 1, 0, 3};
//get a bubble sort algorith which can take int[] as input and return the sorted int[] as output
Sorter<int[]> bubbleSort = SorterFactory.getSortingAlgorithm(SortingAlgorithms.BUBBLESORT);
bubbleSort.sort(toBeSorted);
}
}
答案 1 :(得分:1)
Bridge设计模式将在这里为您提供帮助。一个层次结构包含不同的聚合,用于在基础聚合类中使用分类器引用来保存数据。使用 Sorter 作为基类的另一个层次结构在具体类中提供了不同类型的排序算法。
优势将是两个方面都可以独立发展。
只有Bridge模式的变化是Aggregate-Sorter关系是双向的(稍微类似于Iterator)
答案 2 :(得分:0)