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

2022-11-28  本文已影响0人  jia林

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

实际中的应用

实现文件计算的方法:

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>

策略模式优缺点

上一篇下一篇

猜你喜欢

热点阅读