注:以jdk中的一角来理解设计模式的运用
策略模式:
在不同的情形下选取不同的方式去处理
比如:jdk中的 java.util.Arrays.sort() 方法,则是根据待排序数组的初始的有序程度,以及规模来选取不同的排序方式处理排序
具体实现是这个方法:
策略1:对于小数组,直接使用"快排"1
策略2:对于不是高度结构化(各区间内有序)的数组,执行"快排"
策略3:高度结构化的,使用归并排序
//left 与right 框定此次排序的操作区间
static void sort(int[] a, int left, int right,
int[] work, int workBase, int workLen) {
策略1:对于小数组,直接使用快排
// Use Quicksort on small arrays
if (right - left < QUICKSORT_THRESHOLD) {
sort(a, left, right, true);
return;
}
/*
* Index run[i] is the start of i-th run
* (ascending or descending sequence).
* run[i]记录第i次run得到的有序序列区间起始下标
* 即:数组索引在区间run[i]至run[i+1],表示数组的这部分片段是有序的
*/
int[] run = new int[MAX_RUN_COUNT + 1];
int count = 0; run[0] = left;
// Check if the array is nearly sorted
//检测数组是否接近有序
for (int k = left; k < right; run[count] = k) {
// 框定升序区间
if (a[k] < a[k + 1]) {
// ascending
while (++k <= right && a[k