Java设计结构

时间:2017-12-08 07:05:59

标签: java oop

如果我想用所有这些类中常见的void sort()方法编写一堆排序类(插入,合并等),那么我希望有一个这些类可以实现的接口或抽象类,或者延伸自。

但是,如果我打算将sort方法用作静态,并且不能在抽象超类中保留静态方法。

这种实施的正确方法是什么?

3 个答案:

答案 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)

如果我正确理解了您的问题,可以使用Stategy模式(我使用int数据来简化comprenhension)来完成使用static方法sort(int data [ ])的解决方案。 enter image description here 正如您所说,将所有排序策略分组,例如InsertionSortMergeSortQuicksort等...在接口SortAlgorithm中实现抽象方法{{1} }。
然后编写一个类sort(int data []),它拥有对使用Sorter的抽象类型SortAlgorithm的引用,其中final sort(int data [ ], int choice)在我的示例中是客户端给出的整数

choice