当前位置: 首页 > wzjs >正文

网站建设公司市场定位广州广告推广公司

网站建设公司市场定位,广州广告推广公司,搭建电子商务平台,什么网站做设计可以赚钱吗一、策略模式的本质:面向接口的算法工厂 策略模式(Strategy Pattern)是行为型设计模式的典型代表,其核心思想是将算法族抽象为独立对象,使其能够相互替换。这种模式完美体现了以下面向对象设计原则: 开闭原…

一、策略模式的本质:面向接口的算法工厂

策略模式(Strategy Pattern)是行为型设计模式的典型代表,其核心思想是将算法族抽象为独立对象,使其能够相互替换。这种模式完美体现了以下面向对象设计原则:

  1. 开闭原则(OCP):新增策略无需修改已有代码

  2. 单一职责原则(SRP):每个策略只负责特定算法

  3. 依赖倒置原则(DIP):高层模块依赖抽象而非具体实现

UML类图


二、策略模式的三种典型实现方式

1. 基础版实现(传统方式)

// 策略接口
public interface DiscountStrategy {BigDecimal calculateDiscount(BigDecimal amount);
}// 具体策略
public class VipDiscount implements DiscountStrategy {@Overridepublic BigDecimal calculateDiscount(BigDecimal amount) {return amount.multiply(new BigDecimal("0.8"));}
}public class FestivalDiscount implements DiscountStrategy {@Overridepublic BigDecimal calculateDiscount(BigDecimal amount) {return amount.subtract(new BigDecimal("50"));}
}// 上下文环境
public class OrderContext {private DiscountStrategy strategy;public void setStrategy(DiscountStrategy strategy) {this.strategy = strategy;}public BigDecimal executeDiscount(BigDecimal amount) {return strategy.calculateDiscount(amount);}
}

2. 枚举策略(简化分支判断)

public enum CalculatorStrategy {ADD {@Overridepublic int execute(int a, int b) { return a + b; }},SUBTRACT {@Overridepublic int execute(int a, int b) { return a - b; }};public abstract int execute(int a, int b);
}

3. Spring集成版(企业级实践)

// 定义策略接口
public interface PaymentStrategy {void processPayment(BigDecimal amount);
}// 实现策略(带Spring注解)
@Component("alipayStrategy")
public class AlipayStrategy implements PaymentStrategy {@Overridepublic void processPayment(BigDecimal amount) {// 支付宝支付逻辑}
}@Component("wechatPayStrategy")
public class WechatPayStrategy implements PaymentStrategy {@Overridepublic void processPayment(BigDecimal amount) {// 微信支付逻辑}
}// 策略上下文(自动注入策略集合)
@Service
public class PaymentContext {@Autowiredprivate Map<String, PaymentStrategy> strategyMap;public void executePayment(String paymentType, BigDecimal amount) {PaymentStrategy strategy = strategyMap.get(paymentType + "Strategy");if (strategy != null) {strategy.processPayment(amount);} else {throw new IllegalArgumentException("Unsupported payment type");}}
}

三、策略模式的六大应用场景

场景1:电商促销系统

  • 满减策略

  • 折扣策略

  • 赠品策略

  • 积分抵现策略

场景2:支付网关路由

  • 支付宝支付

  • 微信支付

  • 银联支付

  • 数字货币支付

场景3:日志处理系统

  • 本地文件存储

  • 云存储(OSS/S3)

  • 消息队列转发

  • 数据库存储

场景4:数据校验引擎

  • 手机号校验

  • 身份证校验

  • 邮箱校验

  • 地址校验

场景5:游戏AI系统

  • 攻击策略

  • 防御策略

  • 逃跑策略

  • 补给策略

场景6:报表生成系统

  • PDF生成

  • Excel生成

  • HTML生成

  • CSV生成


四、策略模式与相关模式的深度对比

模式关注点与策略模式的关系
工厂模式对象创建策略模式常配合工厂创建具体策略
状态模式状态转换状态改变行为,策略改变算法
模板方法模式算法步骤策略替换整个算法,模板方法替换步骤
命令模式请求封装策略是主动选择,命令是被动触发

五、企业级实战:支付系统策略架构设计

架构图

复制

[支付请求] --> [支付网关]↓[策略路由中心]↓
+----------------+----------------+
| 支付宝策略     | 微信支付策略    | 银联策略
+----------------+----------------+↓[渠道适配层]↓[第三方支付平台]

代码实现(Spring Boot +策略模式)

java

复制

// 支付策略接口
public interface PaymentStrategy {PaymentResult pay(PaymentRequest request);
}// 支付宝策略实现
@Component
public class AlipayStrategy implements PaymentStrategy {@Override@PaymentType(PayChannel.ALIPAY)public PaymentResult pay(PaymentRequest request) {// 调用支付宝SDKreturn new PaymentResult(true, "ALIPAY-123456");}
}// 策略工厂(自动发现策略)
@Component
public class PaymentStrategyFactory {@Autowiredprivate Map<String, PaymentStrategy> strategyMap;public PaymentStrategy getStrategy(PayChannel channel) {return strategyMap.values().stream().filter(s -> s.getClass().isAnnotationPresent(PaymentType.class)).filter(s -> s.getClass().getAnnotation(PaymentType.class).value() == channel).findFirst().orElseThrow(() -> new RuntimeException("未找到支付策略"));}
}// 支付服务
@Service
@RequiredArgsConstructor
public class PaymentService {private final PaymentStrategyFactory strategyFactory;public PaymentResult processPayment(PaymentRequest request) {PaymentStrategy strategy = strategyFactory.getStrategy(request.getChannel());return strategy.pay(request);}
}

六、策略模式的五个优化技巧

1. 策略预热缓存

public class StrategyCache {private static final Map<String, Strategy> cache = new ConcurrentHashMap<>();public static Strategy getStrategy(String type) {return cache.computeIfAbsent(type, t -> {// 动态加载策略类try {return (Strategy) Class.forName(t).newInstance();} catch (Exception e) {throw new RuntimeException("策略加载失败");}});}
}

2. 策略权重配置

# application.yml
payment:strategies:alipay: weight: 60enable: truewechat: weight: 30  enable: trueunionpay: weight: 10enable: false

3. 策略性能监控

public class MonitoredStrategy implements Strategy {private final Strategy delegate;private final MeterRegistry registry;public MonitoredStrategy(Strategy delegate, MeterRegistry registry) {this.delegate = delegate;this.registry = registry;}@Overridepublic void execute() {Timer.Sample sample = Timer.start(registry);try {delegate.execute();} finally {sample.stop(registry.timer("strategy.execution.time", "type", delegate.getClass().getSimpleName()));}}
}

七、常见陷阱与解决方案

陷阱现象解决方案
策略状态共享线程安全问题使用ThreadLocal或每次新建策略实例
策略膨胀失控类数量爆炸使用DSL动态生成策略类
策略切换开销大频繁切换影响性能引入策略缓存池
策略配置错误运行时找不到策略增加策略fallback机制
策略执行顺序依赖策略之间存在依赖关系引入策略责任链模式
http://www.dtcms.com/wzjs/81541.html

相关文章:

  • 图图网seo建站优化
  • 佛山服务类网站建设站长统计app软件
  • 为什么做外贸独立网站天猫代运营
  • 做现货黄金的金融网站网络营销推广的渠道有哪些
  • 网站可以查出在哪里做的吗营销策划与运营方案
  • 河南确诊病例最新消息企业seo排名有 名
  • 泉州响应式网站建设站长工具whois查询
  • 重庆网站首页制作工业和信息化部
  • 网站开发的高级阶段包括百度一下首页官网
  • 阳泉网站开发游戏推广员拉人技巧
  • 商城网站设计定制提高网站排名软件
  • 做移动端网站设计晨阳seo顾问
  • 宝安营销型网站制作seo查询站长工具
  • 批发网站建设免费的html网站
  • 政府环保部门网站建设的意义网站 seo
  • 天津平台公司绍兴seo外包
  • 浙江网站制作公司网站秒收录工具
  • 做一个游戏app要多少钱上海seo推广服务
  • 做网站如何与腾讯合作2345网址导航官网
  • 海南七星彩网站建设自动秒收录网
  • 做网站需要什么图片在线数据分析网站
  • 网站建设广州天河区网络营销的作用和意义
  • 广宁县住房建设局网站网络营销的职能是什么
  • 公司名字大全集网站的优化策略方案
  • 企业商城网站建设开发网站如何seo推广
  • 网站建设与维护试题及答案网络市场营销
  • 网站建设推广页企业网站推广效果指标分析
  • 湘潭seo优化价格seo人才网
  • 网站建设服务器租赁黑龙江今日新闻
  • 做go kegg的在线网站外贸是做什么的