js设计模式-策略模式与代理模式的应用

简介: 策略模式和代理模式是JavaScript常用设计模式。策略模式通过封装一系列算法,使它们可互换,让算法独立于客户端,提供灵活的选择。例如,定义不同计算策略并用Context类执行。代理模式则为对象提供代理以控制访问,常用于延迟加载或权限控制。如创建RealSubject和Proxy类,Proxy在调用RealSubject方法前可执行额外操作。这两种模式在复杂业务逻辑中发挥重要作用,根据需求选择合适模式解决问题。

策略模式和代理模式是常用的JavaScript设计模式,可以在各种场景下应用。

策略模式(Strategy Pattern)是一种行为型模式,它定义了一系列的算法,并将每个算法封装起来,使它们可以相互替换。策略模式可以使算法独立于使用它的客户端而变化,从而可以灵活地选择算法。在JavaScript中,可以使用函数来实现策略模式。例如:

// 定义一系列的算法
function addStrategy(a, b) {
  return a + b;
}
function subtractStrategy(a, b) {
  return a - b;
}
function multiplyStrategy(a, b) {
  return a * b;
}
// 定义一个策略上下文类
class Context {
  constructor(strategy) {
    this.strategy = strategy;
  }
  executeStrategy(a, b) {
    return this.strategy(a, b);
  }
}
// 使用策略模式
const context = new Context(addStrategy);
console.log(context.executeStrategy(2, 3)); // 输出 5
context.strategy = subtractStrategy;
console.log(context.executeStrategy(5, 2)); // 输出 3
context.strategy = multiplyStrategy;
console.log(context.executeStrategy(4, 3)); // 输出 12

image.gif

代理模式(Proxy Pattern)是一种结构型模式,它为其他对象提供一种代理以控制对这个对象的访问。代理对象可以拦截对被代理对象的访问,并进行一些额外操作。代理模式常用于对目标对象进行一些额外处理,比如延迟加载、权限控制等。在JavaScript中,可以使用类来实现代理模式。例如:

// 定义一个目标对象
class RealSubject {
  request() {
    console.log("RealSubject: 处理请求");
  }
}
// 定义一个代理对象
class Proxy {
  constructor(realSubject) {
    this.realSubject = realSubject;
  }
  request() {
    // 在真正调用目标对象方法之前执行一些额外操作
    console.log("Proxy: 执行额外操作");
    // 调用目标对象的方法
    this.realSubject.request();
  }
}
// 使用代理模式
const realSubject = new RealSubject();
const proxy = new Proxy(realSubject);
proxy.request();

image.gif

在上述例子中,代理对象在调用目标对象的方法之前执行了一些额外操作。代理模式可以帮助我们实现更复杂的业务逻辑,同时保持目标对象的单一职责。

策略模式和代理模式在实际应用中具有广泛的应用场景,可以根据具体需求选择适合的设计模式来解决问题。

相关文章
|
JavaScript 前端开发
如何减少Node.js应用中的全局变量?
如何减少Node.js应用中的全局变量?
725 165
|
存储 监控 JavaScript
基于布隆过滤器的 Node.js 算法在局域网电脑桌面监控设备快速校验中的应用研究
本文探讨了布隆过滤器在局域网电脑桌面监控中的应用,分析其高效空间利用率、快速查询性能及动态扩容优势,并设计了基于MAC地址的校验模型,提供Node.js实现代码,适用于设备准入控制与重复数据过滤场景。
372 0
|
10月前
|
设计模式 算法 搜索推荐
Java 设计模式之策略模式:灵活切换算法的艺术
策略模式通过封装不同算法并实现灵活切换,将算法与使用解耦。以支付为例,微信、支付宝等支付方式作为独立策略,购物车根据选择调用对应支付逻辑,提升代码可维护性与扩展性,避免冗长条件判断,符合开闭原则。
2643 35
|
11月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
541 3
|
11月前
|
设计模式 人工智能 算法
基于多设计模式的状态扭转设计:策略模式与责任链模式的实战应用
接下来,我会结合实战案例,聊聊如何用「策略模式 + 责任链模式」构建灵活可扩展的状态引擎,让抽奖系统的状态管理从「混乱战场」变成「有序流水线」。
|
12月前
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。
|
设计模式 算法 Java
设计模式觉醒系列(04)策略模式|简单工厂模式的升级版
本文介绍了简单工厂模式与策略模式的概念及其融合实践。简单工厂模式用于对象创建,通过隐藏实现细节简化代码;策略模式关注行为封装与切换,支持动态替换算法,增强灵活性。两者结合形成“策略工厂”,既简化对象创建又保持低耦合。文章通过支付案例演示了模式的应用,并强调实际开发中应根据需求选择合适的设计模式,避免生搬硬套。最后推荐了JVM调优、并发编程等技术专题,助力开发者提升技能。
|
资源调度 负载均衡 JavaScript
使用PM2工具部署Vue.js应用于服务器
以上步骤完成之后,你就成功利⽤ PM⼆工具将 Vuejs 应⽰程序部署至服 务 器,并且配合反向代理实现了高效稳定访问及负载均衡功能。
588 0
|
设计模式 算法 搜索推荐
【设计模式】【行为型模式】策略模式(Strategy)
一、入门 什么是策略模式? 策略模式是一种行为设计模式,允许在运行时选择算法或行为。它将算法封装在独立的类中,使得它们可以互换,而不影响客户端代码。 为什么需要策略模式? 策略模式的主要目的是解决算法
305 14