【设计模式】策略模式和代理模式

策略模式

策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。

该模式主要解决在有多种算法相似的情况下,使用 if... else ... 所带来的复杂和难以维护。它的优点是算法可以自由切换,同时可以避免多重 if... else 判断,且具有良好的扩展性。

类似于我们在路由的匹配使用策略模式。前端应用在转换后端数据为更优雅的页面展示信息。

js 复制代码
const strategy = {
    "S": function (salary) {
        return salary * 4;
    },
    "A": function (salary) {
        return salary * 3;
    },
    "B": function (salary) {
        return salary * 2;
    }
}
function claBonus(level, salary) {
    return strategy[level](salary);
}

console.log(claBonus("S", 100))
console.log(claBonus("A", 100))

代理模式

es6 中的 proxy 就是代理模式的一个非常好的体现。

js 复制代码
class Star {
    play() {
        console.log('唱歌');
    }
}
class StarProxy {
    constructor() {
        this.star = new Star();
    }
    talk(price) {
        if (price > 10000) {
            this.star.play();
        } else {
            console.log('价格太低');
        }
    }
}
const jr = new StarProxy();
jr.talk(10001); // 唱歌
相关推荐
獨枭3 小时前
macOS 终端优化
macos·策略模式
Seven975 小时前
【设计模式】使用中介者模式实现松耦合设计
java·后端·设计模式
Seven975 小时前
【设计模式】探索状态模式在现代软件开发中的应用
java·后端·设计模式
Seven975 小时前
【设计模式】从事件驱动到即时更新:掌握观察者模式的核心技巧
java·后端·设计模式
Seven976 小时前
【设计模式】责任链模式教你如何优雅地分发任务
java·后端·设计模式
Seven976 小时前
【设计模式】命令模式助力快速添加新命令而不影响现有代码
java·后端·设计模式
这里有鱼汤7 小时前
程序员必看!突破编程瓶颈!这3种设计模式让你的Python项目飞起来
后端·python·设计模式
vker7 小时前
责任链 vs 规则树:如何构建更强大的规则引擎?
后端·设计模式·代码规范
牵牛老人7 小时前
C++设计模式-抽象工厂模式:从原理、适用场景、使用方法,常见问题和解决方案深度解析
c++·设计模式·抽象工厂模式
液态不合群7 小时前
【设计模式】从火车站卖票看代理模式的实际应用
设计模式·代理模式