设计模式之策略模式在实际场景中的应用

策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。封装的策略算法一般是独立的,策略模式根据输入来调整采用哪个算法。关键是策略的实现和使用分离。

实际中的应用

  • 表格 formatter
    Element 的表格控件的 Column 接受一个 formatter 参数,用来格式化内容,其类型为函数,并且还可以接受几个特定参数,像这样: Function(row, column, cellValue, index)
    以文件大小转化为例,后端经常会直接传 bit 单位的文件大小,那么前端需要根据后端的数据,根据需求转化为自己需要的单位的文件大小,比如 KB/MB。

实现文件计算的方法:

export const unitConvert = {
    /*  将文件大小(bit)转化为 KB */
    bitToKB: val => {
        const num = Number(val)
        return isNaN(num) ? val : (num / 1024).toFixed(0) + 'KB'
    },
    /*  将文件大小(bit)转化为 MB */
    bitToMB: val => {
        const num = Number(val)
        return isNaN(num) ? val : (num / 1024 / 1024).toFixed(1) + 'MB'
    }
}

/* 生成el表单 formatter */
const unitConvertFn = function(type, rowKey){ 
  return function(row, column, cellValue, index){
    return unitConvert[type](row[rowKey])
  }
}

export default unitConvertFn

组件中使用





策略模式优缺点

  • 优点
    1.策略之间相互独立,但策略可以自由切换,提高代码复用率
    2.避免过多的判断
    3.可扩展性好,策略可以很方便的进行扩展

  • 缺点
    1.复杂的逻辑无法共享,造成资源浪费
    2.使用之前需要了解实现的逻辑,增加了使用成本

你可能感兴趣的:(设计模式之策略模式在实际场景中的应用)