设计模式:策略模式

策略模式其实是对同一实体的同一方法有不同的策略,对策略进行封装,对修改关闭对扩展开发的一种设计思想。例如对一个实体猫比较大小可以定义年龄比较大小也可以定义体重比较大小。这种不同比较大小方式的挑选就是策略模式,把策略单独封装成一个类大大降低了系统的耦合性。
首先创建实体类:Dog

public class Dog {
    int age;

    public Dog(int age) {
        this.age = age;
    }
}

编写自己的Comparator接口,java有一个自带的Comparator但是这里我们方便更好的理解策略模式就自己敲一个。

public  interface Comparator<T> {
    int compareTo(T o1,T o2);
}

写一个Dog类型的比较器继承Comparator接口

public class DogComparator implements Comparator<Dog>{

    @Override
    public int compareTo(Dog o1, Dog o2) {
       if (o1.age-o2.age > 0) return 1;//o1大
       else if (o1.age-o2.age < 0) return -1;//o2大
       else return 0;
    }
}

再写一个比较器Sorter

public class Sorter<T> {

    public void sort(T[] arr, Comparator comparetor){
        for (int i = 0; i < arr.length-1; i++) {
            int minPos = i;
            for(int j = i+1; j<arr.length;j++){
                minPos = comparetor.compareTo(arr[j],arr[minPos])==-1 ? j : minPos;
            }
            swap(arr,i,minPos);
        }
    }
    
   void swap(T[] arr,int i, int j){
       T temp = arr[i];
       arr[i] = arr[j];
       arr[j] = temp;
   }
   
     void show(T[] arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

来一个主方法测试一下

 public static void main(String[] args) {
        Dog arr[] = {new Dog(12),new Dog(18),new Dog(14)};
        Sorter<Dog> sorter = new Sorter<>();
        Comparator<Dog> comparator = new DogComparator();
        sorter.sort(arr,comparator);
        sorter.show(arr);
    }

图解一下:Sorter的sort方法中传入泛型的数组和实现了Comparator接口的比较器实现类。比较器的泛型是由接口指定的。所以只需要创建一个指定泛型的比较器和数组一起传入sort方法即可。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值