MST
星途 面试题库

面试题:Java策略模式中如何定义具体策略类

在Java策略模式实现算法动态切换场景下,请描述如何定义具体的策略类,包括类的结构、需要实现的接口或继承的抽象类等,以实现不同的算法逻辑。
29.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 定义策略接口
    • 首先定义一个策略接口,该接口包含具体策略类需要实现的方法。例如,如果是实现不同的排序算法切换场景,接口可能如下:
    public interface SortStrategy {
        void sort(int[] array);
    }
    
  2. 定义具体策略类
    • 类的结构:具体策略类实现上述定义的策略接口。
    • 实现接口:以冒泡排序策略类为例:
    public class BubbleSortStrategy implements SortStrategy {
        @Override
        public void sort(int[] array) {
            for (int i = 0; i < array.length - 1; i++) {
                for (int j = 0; j < array.length - i - 1; j++) {
                    if (array[j] > array[j + 1]) {
                        int temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                    }
                }
            }
        }
    }
    
    • 再以快速排序策略类为例:
    public class QuickSortStrategy implements SortStrategy {
        @Override
        public void sort(int[] array) {
            quickSort(array, 0, array.length - 1);
        }
    
        private void quickSort(int[] array, int low, int high) {
            if (low < high) {
                int pi = partition(array, low, high);
                quickSort(array, low, pi - 1);
                quickSort(array, pi + 1, high);
            }
        }
    
        private int partition(int[] array, int low, int high) {
            int pivot = array[high];
            int i = (low - 1);
            for (int j = low; j < high; j++) {
                if (array[j] < pivot) {
                    i++;
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
            int temp = array[i + 1];
            array[i + 1] = array[high];
            array[high] = temp;
            return i + 1;
        }
    }
    
    • 每个具体策略类都通过实现策略接口,提供了不同的算法逻辑实现,从而实现算法的动态切换。