2026/1/15 2:19:27
网站建设
项目流程
网站建设初学,最火的深圳网站建设,在线作图网站,游戏推广员拉人技巧策略模式详解什么是策略模式#xff1f;核心机制现实类比策略模式的优势典型应用场景1. 电商促销系统2. 支付系统实际应用示例电商订单处理图像处理应用策略模式详解
什么是策略模式#xff1f;
策略模式是一种行为设计模式#xff0c;其核心思想是#xff1a;定义一系列…策略模式详解什么是策略模式核心机制现实类比策略模式的优势典型应用场景1. 电商促销系统2. 支付系统实际应用示例电商订单处理图像处理应用策略模式详解什么是策略模式策略模式是一种行为设计模式其核心思想是定义一系列算法将每一个算法都封装起来并使它们可以相互替换。策略模式让算法独立于使用它的客户端而变化。核心机制策略模式的实现包含以下关键组件策略接口(Strategy Interface)定义所有支持的算法或行为的公共接口具体策略类(Concrete Strategies)实现策略接口的具体算法类上下文类(Context)持有一个策略对象的引用并通过策略接口与之交互现实类比以导航系统为例Context我们的出行行为Strategy Interface导航算法接口Concrete StrategiesFastestRouteStrategy时间最短策略ShortestRouteStrategy距离最短策略AvoidHighwayStrategy避开高速策略ScenicRouteStrategy风景路线策略策略模式的优势完美遵循开闭原则新增策略时只需添加新类无需修改现有代码例如电商系统新增会员日双倍积分策略时只需创建DoublePointsStrategy类算法独立与解耦每个策略类封装特定算法可独立测试和维护例如支付策略可单独测试微信支付、支付宝支付的业务逻辑消除条件语句将复杂的条件分支转换为对象组合例如替代支付方式选择的switch-case结构// 传统方式switch(paymentType){caseALIPAY:processAlipay();break;caseWECHAT:processWechat();break;// ...}// 策略模式paymentStrategy.pay(amount);运行时灵活性可在程序运行时动态切换策略例如根据网络状况切换图片加载策略高质量/省流量典型应用场景1. 电商促销系统策略接口publicinterfacePromotionStrategy{doublecalculatePrice(doubleoriginalPrice);}具体策略实现满减策略publicclassCashRebateStrategyimplementsPromotionStrategy{privatedoublecondition;// 满减条件如300privatedoublerebate;// 减免金额如50OverridepublicdoublecalculatePrice(doubleoriginalPrice){returnoriginalPricecondition?originalPrice-rebate:originalPrice;}}折扣策略publicclassDiscountStrategyimplementsPromotionStrategy{privatedoublediscountRate;// 折扣率如0.9OverridepublicdoublecalculatePrice(doubleoriginalPrice){returnoriginalPrice*discountRate;}}无优惠策略publicclassNoPromotionStrategyimplementsPromotionStrategy{OverridepublicdoublecalculatePrice(doubleoriginalPrice){returnoriginalPrice;}}上下文使用publicclassPromotionContext{privatePromotionStrategystrategy;publicvoidsetStrategy(PromotionStrategystrategy){this.strategystrategy;}publicdoubleexecuteStrategy(doubleoriginalPrice){returnstrategy.calculatePrice(originalPrice);}}2. 支付系统策略接口publicinterfacePaymentStrategy{voidpay(doubleamount);}具体支付实现支付宝支付publicclassAliPayStrategyimplementsPaymentStrategy{Overridepublicvoidpay(doubleamount){// 调用支付宝SDKSystem.out.println(使用支付宝支付amount元);}}微信支付publicclassWeChatPayStrategyimplementsPaymentStrategy{Overridepublicvoidpay(doubleamount){// 调用微信支付APISystem.out.println(使用微信支付amount元);}}银行卡支付publicclassCardPayStrategyimplementsPaymentStrategy{privateStringcardNumber;privateStringcvv;publicCardPayStrategy(StringcardNumber,Stringcvv){this.cardNumbercardNumber;this.cvvcvv;}Overridepublicvoidpay(doubleamount){// 银行卡支付逻辑System.out.println(使用银行卡cardNumber.substring(cardNumber.length()-4)支付amount元);}}支付服务上下文publicclassPaymentService{privatePaymentStrategypaymentStrategy;publicvoidsetPaymentStrategy(PaymentStrategystrategy){this.paymentStrategystrategy;}publicvoidprocessPayment(doubleamount){paymentStrategy.pay(amount);}}实际应用示例电商订单处理// 创建支付上下文PaymentServicepaymentServicenewPaymentService();// 用户选择支付宝支付paymentService.setPaymentStrategy(newAliPayStrategy());paymentService.processPayment(100.00);// 促销活动切换PromotionContextpromotionContextnewPromotionContext();promotionContext.setStrategy(newCashRebateStrategy(300,50));doublefinalPricepromotionContext.executeStrategy(350.00);// 返回300.00图像处理应用// 图像压缩策略interfaceCompressionStrategy{voidcompress(Imageimage);}classJPEGCompressionimplementsCompressionStrategy{privateintquality;publicJPEGCompression(intquality){this.qualityquality;}Overridepublicvoidcompress(Imageimage){// JPEG压缩逻辑}}classPNGCompressionimplementsCompressionStrategy{Overridepublicvoidcompress(Imageimage){// PNG无损压缩}}// 根据用户选择应用不同压缩策略CompressionStrategystrategyuserWantsLossless?newPNGCompression():newJPEGCompression(80);strategy.compress(userImage);