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

策略模式

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

该模式主要解决在有多种算法相似的情况下,使用 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); // 唱歌
相关推荐
钱栈up3 小时前
从 macOS 切回 Windows,我用 5 个免费工具把 80% 操作习惯搬了回来
windows·macos·策略模式
日和雫3 小时前
封装、继承、多态 & 组合,为什么组合大于继承?
设计模式
代钦塔拉6 小时前
【C++/Qt 进阶】设计模式系列(6):桥接模式——把“两个独立变化的维度“拆开
c++·qt·设计模式
haluhalu.6 小时前
深入理解AIAgent(1.3)--- 设计模式
人工智能·python·设计模式·langchain
高晶1 天前
CANopen 在 BMS 系统中的 C 语言实战指南
设计模式·程序员
博风1 天前
13、设计模式应用举例:工厂方法模式:创建药品对象
设计模式·工厂方法模式
代钦塔拉1 天前
【C++/Qt 进阶】设计模式系列(5):适配器模式——给“不兼容的接口“贴一层翻译膜
c++·qt·设计模式
bigbread2 天前
策略模式 + 工厂方法模式在项目中的实战应用
设计模式
高晶2 天前
C 语言实现 BMS 系统中 SPI 通信协议实战指南
设计模式·程序员
代钦塔拉2 天前
【C++/Qt 进阶】设计模式系列(2):工厂模式——从游戏角色到披萨店
c++·算法·设计模式