策略模式实现对数组的普通排序和特殊排序 —> {1, 3, 7, 9, 8, 6, 2}
public class Test3 {
public static void main(String[] args) {
int[] arr = {1, 3, 2, 6, 7, 8, 9};
int num = 0;
Template template = new NormalSort();
template.sort(arr, num);
}
public interface Template {
void sort(int[] arr, int num);
}
public static abstract class TemplateImplementation implements Template {
@Override
public void sort(int[] arr, int num) {
CommonSort(arr);
doSpeciaThing(arr, num);
CoownedPrint(arr);
}
protected abstract void doSpeciaThing(int[] arr, int num);
protected void CoownedPrint(int[] arr) {
System.out.println(Arrays.toString(arr));
}
protected void CommonSort(int[] arr) {
Arrays.sort(arr);
}
}
public static class NormalSort extends TemplateImplementation {
@Override
protected void doSpeciaThing(int[] arr, int num) {
PolicyInterface policyInterface = SortStrategyFactory.getSortStrategy(num);
policyInterface.SortMethod(arr);
}
}
public interface PolicyInterface {
void SortMethod(int[] arr);
}
public static class CommonSortingStrategy implements PolicyInterface {
@Override
public void SortMethod(int[] arr) {
}
}
public static class SpecialSortingStrategy implements PolicyInterface {
@Override
public void SortMethod(int[] arr) {
int[] arr2 = new int[arr.length];
int startNum = 0;
int endNum = arr2.length - 1;
for (int i = 0; i < arr.length; i++) {
if (i % 2 == 0) {
arr2[startNum] = arr[i];
startNum++;
} else {
arr2[endNum] = arr[i];
endNum--;
}
}
for (int i = 0; i < arr2.length; i++) {
arr[i] = arr2[i];
}
}
}
public static class SortStrategyFactory {
public static PolicyInterface getSortStrategy(int num) {
if (num == 0) {
return new CommonSortingStrategy();
} else {
return new SpecialSortingStrategy();
}
}
}
}