美文网首页
设计模式之策略模式在实际场景中的应用

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

作者: jia林 | 来源:发表于2022-11-28 22:49 被阅读0次

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

实际中的应用

  • 表格 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

组件中使用

<template>
    <el-table :data="tableData">
        <el-table-column prop="date" label="日期"></el-table-column>
        <el-table-column prop="name" label="文件名"></el-table-column>
        <!-- 进行调用-->
        <el-table-column prop="sizeKb" label="文件大小(KB)"
                         :formatter='unitConvertFn("bitToKB", "sizeKb")'>
        </el-table-column>
        <el-table-column prop="sizeMb" label="附件大小(MB)"
                         :formatter='unitConvertFn("bitToMB", "sizeMb")'>
        </el-table-column>
    </el-table>
</template>

<script type='text/javascript'>
    import unitConvertFn from './unitConvertFn.js'
    
    export default {
        data() {
            return {
                unitConvertFn,
                tableData: [
                    { date: '2022-11-28', name: '文件1', sizeKb: 1234, sizeMb: 1133427 },
                    { date: '2022-11-28', name: '文件2', sizeKb: 4213, sizeMb: 7535162 }]
            }
        }
    }
</script>

策略模式优缺点

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

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

相关文章

网友评论

      本文标题:设计模式之策略模式在实际场景中的应用

      本文链接:https://www.haomeiwen.com/subject/xvokfdtx.html