qiuhongbingo / blog

Writing something in Issues.
https://github.com/qiuhongbingo/blog/issues
3 stars 0 forks source link

策略模式在前端中的应用 #31

Open qiuhongbingo opened 4 years ago

qiuhongbingo commented 4 years ago
/**
 * 策略模式能够让开发者基于具体场景,来切换不同的算法或者策略
 * 本身这个模式比较简单,但是有一个比较有意思的应用:
 * V8 引擎在实现排序时,根据排序长度的不同,动态合理选用排序策略,达到尽可能的性能优化
 * 在目标数组长度大于 5 时使用快排,否则使用冒泡排序
 */
const bubbleSort = target => {
  console.log('Sorting with bubble sort')
  // ...
  // ...
  return target
}

const quickSort = target => {
  console.log('Sorting with quick sort')
  // ...
  // ...
  return target
}

const sorter = target => {
  if (target.length > 5) {
    return quickSort(target)
  } else {
    return bubbleSort(target)
  }
}

// 上述代码的使用
const long = [1, 5, 4, 3, 2, 8]
const short = [1, 5, 4]

const result1 = sorter(long)
const result2 = sorter(short)

// 输出
// Sorting with quick sort
// Sorting with bubble sort

/**
 * 由此看出:
 * 第一个部分是策略类,策略类封装了具体的算法,并负责具体的计算过程
 * 第二个部分是环境类,这个环境类接受客户的请求,随后把请求委托给某一个策略类
 */