Java学习笔记

java——策略模式

2017-06-05  本文已影响44人  草丛伦

关于策略模式,可以简单的认为,将一段算法操作,抽取出来,通过接口的形式进行声明,然后在各自的子类写出各自的实现,这样不会相互影响,并且可以做各种替换,很类似与对象的多态。一种方法,多种算法实现,通过参数的形式做区分。
对于算法,如果全部写在一个方法里面,即使用if-else来区分,难免也很臃肿,阅读性很差。
上代码:
定义一个接口,做声明跟管理

interface IStrategy {
    String sort(int[] arr );
}

各自的算法实现:

class StrategyOne implements IStrategy {

    @Override
    public String sort(int[] arr) {
        //冒泡排序
        int length = arr.length;
        for (int j = 0; j < length; j++) {
            //每次循环 都会放置最大值到最右边
            for (int i = 1; i < length - j; i++) {
                if (arr[i - 1] > arr[i]) {
                    int tmp = arr[i];
                    arr[i] = arr[i - 1];
                    arr[i - 1] = tmp;
                }
            }
        }
        return Arrays.toString(arr);
    }
}

class StrategyTwo implements IStrategy {
    @Override
    public String sort(int[] arr) {
        //选择排序
        int length = arr.length;
        for (int i = 0; i < length; i++) {
            for (int j = i + 1; j < length; j++) {
                if (arr[i] > arr[j]) {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return Arrays.toString(arr);
    }
}

这样,将实现方式封装起来,使用的时候通过参数传进去,在不同需求上面做不同的替换。

public class TestStragey {

    public static void main(String[] args) {
        int[] arr = {33, 242, 421, 53, 2423, 5534,1,3,2,552};
        print(arr, new StrategyOne());
        print(arr, new StrategyTwo());
    }

    public static void print(int[] arr, IStrategy strategy) {
        String sort = strategy.sort(arr);
        System.out.println(sort);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读