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

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

作者: 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