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

策略模式

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

该模式主要解决在有多种算法相似的情况下,使用 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); // 唱歌
相关推荐
许野平9 分钟前
多层设计模式:可否设计各层之间公用的数据定义模块?
设计模式
silver68714 分钟前
装饰器模式详解
设计模式
JINGWHALE116 分钟前
设计模式 结构型 装饰器模式(Decorator Pattern)与 常见技术框架应用 解析
前端·人工智能·后端·设计模式·性能优化·系统架构·装饰器模式
ThetaarSofVenice1 小时前
电影院售票 - 策略模式(Strategy Pattern)
java·设计模式·策略模式
百年孤独百年6 小时前
解决zotero同步失败的问题(您的WebDAV服务器对GET请求返回了HTTP 0 错误)
代理模式·zotero·webdav·同步失败
JINGWHALE17 小时前
设计模式 结构型 适配器模式(Adapter Pattern)与 常见技术框架应用 解析
前端·人工智能·后端·设计模式·性能优化·系统架构·适配器模式
silver6877 小时前
适配器模式详解
设计模式
玉面小君7 小时前
C# 设计模式(结构型模式):适配器模式
设计模式·c#·适配器模式
咖啡の猫9 小时前
设计模式概述
设计模式
玉带湖水位记录员9 小时前
命令模式——C++实现
c++·设计模式·命令模式