策略模式: 做一件事情时,不同的执行方式
例如:下列代码
定义了一种排序方法sort,根据传进来的comparator 对象(根据什么排序)。实现对象的排序
package com.atguigu.test.designPattern.Strategy; import com.atguigu.modules.entity.Person; import java.util.Arrays; import java.util.Comparator; public class ObjectCompare2<T>{ public void sort(T[] arr,Comparator<T> comparator){ for (int i = 0; i <arr.length-1; i++) { int minPos=i; for (int j =i+1; j < arr.length; j++) { minPos= comparator.compare(arr[j],arr[minPos])==-1?j:minPos; } swap(arr,i,minPos); } } public void swap(T[] arr,int i,int j){ T temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } public static void main(String[] args) { Person[] arr={new Person(10,500),new Person(12,300), new Person(5,100),new Person(20,1000)}; ObjectCompare2<Person> personObjectCompare2 = new ObjectCompare2<>(); //根据age排序 personObjectCompare2.sort(arr, new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { if(o1.getAge()<o2.getAge()){ return -1; }else if(o1.getAge()>o2.getAge()){ return 1; } return 0; } }); System.out.println(Arrays.toString(arr)); //根据balance排序 personObjectCompare2.sort(arr, new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { if(o1.getBalance()<o2.getBalance()){ return -1; }else if(o1.getBalance()>o2.getBalance()){ return 1; } return 0; } }); System.out.println(Arrays.toString(arr)); //函数型接口 适用于lambda表达式的接口 函数型接口就是只有一个抽象方法的接口 personObjectCompare2.sort(arr,(o1,o2)->{ if(o1.getAge()<o2.getAge()){ return -1; }else if(o1.getAge()>o2.getAge()){ return 1; } return 0; }); System.out.println(Arrays.toString(arr)); } }
原文:https://www.cnblogs.com/zxj-study/p/13195393.html