javascript中用class实现策略模式的核心是封装算法为独立类并通过context统一调度,定义抽象strategy基类约束execute方法,各支付策略继承并实现,context持策略实例并委托执行,支持运行时切换;增强版引入strategyregistry按key注册与动态获取策略类。

JavaScript 中用 class 实现策略模式分发,核心是把不同算法封装成独立类,再通过一个上下文(Context)类统一调度,避免大量 if/else 或 switch,提升可读性和可扩展性。
定义策略接口(抽象基类)
用 class 声明一个抽象策略基类,不直接实例化,只约定统一方法签名(如 execute())。ES6 不支持原生 abstract,可用抛错模拟约束:
class Strategy {
execute(...args) {
throw new Error('子类必须实现 execute 方法');
}
}
实现具体策略类
每个业务规则继承 Strategy,覆盖 execute。例如处理不同支付方式:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
class AlipayStrategy extends Strategy {
execute(amount) {
return `支付宝支付 ${amount} 元`;
}
}
class WechatPayStrategy extends Strategy {
execute(amount) {
return `微信支付 ${amount} 元`;
}
}
class BankTransferStrategy extends Strategy {
execute(amount, account) {
return `银行转账 ${amount} 元到 ${account}`;
}
}
创建策略上下文类(分发器)
上下文持有一个策略实例,对外提供统一入口,内部委托给当前策略执行。支持运行时切换策略:
class PaymentContext {
constructor(strategy) {
this.strategy = strategy;
}
setStrategy(strategy) {
this.strategy = strategy;
}
processPayment(...args) {
return this.strategy.execute(...args);
}
}
// 使用示例
const context = new PaymentContext(new AlipayStrategy());
console.log(context.processPayment(100)); // 支付宝支付 100 元
context.setStrategy(new WechatPayStrategy());
console.log(context.processPayment(200)); // 微信支付 200 元
策略注册与动态获取(增强版)
为避免手动 new,可加一个策略仓库,按 key 管理策略类,运行时根据类型名自动实例化:
class StrategyRegistry {
static strategies = new Map();
static register(name, StrategyClass) {
this.strategies.set(name, StrategyClass);
}
static get(name) {
const StrategyClass = this.strategies.get(name);
if (!StrategyClass) throw new Error(`未注册策略: ${name}`);
return new StrategyClass();
}
}
// 注册
StrategyRegistry.register('alipay', AlipayStrategy);
StrategyRegistry.register('wechat', WechatPayStrategy);
// 动态使用
const context = new PaymentContext(
StrategyRegistry.get('alipay')
);
不复杂但容易忽略:策略类应无状态或仅依赖传入参数,确保可复用、易测试;上下文不关心具体逻辑,只负责“选谁来干”和“怎么传参”。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










