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

东莞做网站推广公司长春网站建设工作

东莞做网站推广公司,长春网站建设工作,微信公众平台官方网站登录,响应式网站微博视频教程策略模式基础概念策略模式(Strategy Pattern)是一种行为型设计模式,其核心思想是定义一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端,符合开闭原则&…

策略模式基础概念

策略模式(Strategy Pattern)是一种行为型设计模式,其核心思想是定义一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端,符合开闭原则(对扩展开放,对修改关闭)。

策略模式的核心组件

  1. 策略接口(Strategy) - 定义所有支持的算法的公共接口
  2. 具体策略(ConcreteStrategy) - 实现策略接口的具体算法
  3. 上下文(Context) - 持有一个策略接口的引用,负责根据需要选择和使用具体策略
  4. 客户端(Client) - 创建并配置上下文对象,选择合适的策略

策略模式的实现

下面通过一个电商系统的折扣计算示例展示策略模式的实现:

// 策略接口 - 折扣计算
interface DiscountStrategy {double applyDiscount(double originalPrice);
}// 具体策略 - 无折扣
class NoDiscount implements DiscountStrategy {@Overridepublic double applyDiscount(double originalPrice) {return originalPrice;}
}// 具体策略 - 固定金额折扣
class FixedAmountDiscount implements DiscountStrategy {private double discountAmount;public FixedAmountDiscount(double discountAmount) {this.discountAmount = discountAmount;}@Overridepublic double applyDiscount(double originalPrice) {return Math.max(0, originalPrice - discountAmount);}
}// 具体策略 - 百分比折扣
class PercentageDiscount implements DiscountStrategy {private double discountPercentage;public PercentageDiscount(double discountPercentage) {this.discountPercentage = discountPercentage;}@Overridepublic double applyDiscount(double originalPrice) {return originalPrice * (1 - discountPercentage / 100);}
}// 上下文 - 购物车
class ShoppingCart {private DiscountStrategy discountStrategy;public ShoppingCart() {// 默认无折扣this.discountStrategy = new NoDiscount();}// 设置折扣策略public void setDiscountStrategy(DiscountStrategy discountStrategy) {this.discountStrategy = discountStrategy;}// 计算折扣后的价格public double calculateTotal(double originalPrice) {return discountStrategy.applyDiscount(originalPrice);}
}// 客户端代码
public class StrategyPatternClient {public static void main(String[] args) {ShoppingCart cart = new ShoppingCart();double originalPrice = 1000.0;// 使用无折扣策略cart.setDiscountStrategy(new NoDiscount());System.out.println("原价: " + originalPrice);System.out.println("无折扣价格: " + cart.calculateTotal(originalPrice));// 使用固定金额折扣策略(减200元)cart.setDiscountStrategy(new FixedAmountDiscount(200.0));System.out.println("固定金额折扣价格: " + cart.calculateTotal(originalPrice));// 使用百分比折扣策略(打8折)cart.setDiscountStrategy(new PercentageDiscount(20.0));System.out.println("百分比折扣价格: " + cart.calculateTotal(originalPrice));}
}

策略模式的应用场景

  1. 算法选择 - 当系统需要在多个算法中动态选择一个时
  2. 避免条件语句 - 用策略模式替代复杂的 if-else 或 switch 语句
  3. 行为扩展 - 当需要在运行时动态更改对象的行为时
  4. 多种实现方式 - 当一个问题有多种解决方式,且需要在运行时切换时
  5. 权限控制 - 根据不同用户角色应用不同的访问策略

策略模式与状态模式的对比

特性策略模式状态模式
核心目的算法的替换和选择对象状态的管理和转换
客户端控制客户端主动选择策略状态转换由上下文或状态自身控制
状态数量策略之间无关联,数量固定状态之间有关联,数量可能动态变化
结构复杂度简单,策略之间相互独立复杂,状态之间有转换逻辑
典型应用支付方式、排序算法、折扣计算工作流状态、游戏角色状态

策略模式的优缺点

优点

  • 符合开闭原则 - 可以在不修改原有代码的情况下新增策略
  • 消除条件语句 - 避免使用大量的 if-else 或 switch 语句
  • 提高代码复用性 - 策略可以被多个上下文复用
  • 简化单元测试 - 每个策略可以独立测试
  • 解耦算法与客户端 - 客户端不需要了解算法的具体实现

缺点

  • 类数量增加 - 每个策略都需要一个独立的类,可能导致类爆炸
  • 客户端必须了解策略差异 - 客户端需要知道不同策略的区别才能选择
  • 策略与上下文耦合 - 上下文需要理解策略接口,可能存在一定耦合
  • 不适合简单场景 - 对于简单的算法选择,使用策略模式可能过于复杂

使用策略模式的注意事项

  1. 合理设计策略接口 - 确保策略接口简洁且满足需求
  2. 策略的创建与管理 - 可以使用工厂模式或配置文件来管理策略的创建
  3. 避免过度使用 - 仅在确实需要动态切换算法时使用
  4. 考虑策略组合 - 可以通过组合多个策略实现更复杂的行为
  5. 使用枚举策略 - 对于固定且简单的策略,可以考虑使用枚举实现

策略模式是一种非常实用的设计模式,它通过将算法封装并使其可互换,提高了代码的灵活性和可维护性。在实际开发中,策略模式常用于电商折扣系统、支付方式选择、游戏 AI 等需要动态选择算法的场景。


文章转载自:

http://fEs9Fm5l.zthLn.cn
http://75Wkr1CX.zthLn.cn
http://FoVL85O8.zthLn.cn
http://T077YWxn.zthLn.cn
http://dwRKjGpg.zthLn.cn
http://EhOlZ7hK.zthLn.cn
http://gl9iuitA.zthLn.cn
http://qLJlys8J.zthLn.cn
http://q5yqkJMj.zthLn.cn
http://GaocQ3e9.zthLn.cn
http://ZnYswQx0.zthLn.cn
http://I9s1nVA7.zthLn.cn
http://rAS3D6ku.zthLn.cn
http://MeJLoiPN.zthLn.cn
http://6HLZOEP9.zthLn.cn
http://eombdT67.zthLn.cn
http://4CBQRAEu.zthLn.cn
http://AU49WyuL.zthLn.cn
http://7sYpmkKX.zthLn.cn
http://p55F0nAC.zthLn.cn
http://5G4YRIlh.zthLn.cn
http://aY8UAycy.zthLn.cn
http://bdqPDMIX.zthLn.cn
http://OYREJAJ1.zthLn.cn
http://an4UWn1S.zthLn.cn
http://V5hGU6HK.zthLn.cn
http://valLh9X7.zthLn.cn
http://8PpQwDfd.zthLn.cn
http://wg0WvrwO.zthLn.cn
http://BShY3K18.zthLn.cn
http://www.dtcms.com/wzjs/618464.html

相关文章:

  • 前端素材网站网站建设规模与类别
  • 江阴市住房和城乡建设局网站wordpress文件上传到那个文件
  • 下载爱城市网app官方网站wordpress个人介绍主题
  • 网站设置会员湖南省交通建设质量监督站网站
  • 北京网站建设著名公司模板图片 背景
  • 网站建设培训 上海移动插件WordPress
  • 邢台网站建设费用wordpress设置段落
  • 简单个人博客模板网站wordpress php设置
  • 怎样加快网站收录wordpress目录设置
  • 手机看网站网站建设广州天河
  • 怎么把自己电脑建设网站一起做英语作业网站
  • 字幕如何做模板下载网站网站模板文件在哪里下载
  • 中国大型网站好用的wordpress插件
  • 响应式网站广州网站建设国家653工程国家建筑工程网
  • 网站建设升级的必要性淘宝网站建设单子好接吗
  • 网站建设需要的手续河源seo
  • 大型服装网站开发泾川门户网
  • 南昌网站搜索排名网站合同需要注意什么呢
  • 越秀网站建设价格wordpress首页不显示最新文章
  • jn建站系统网吧网络维护公司
  • 两学一做网站进不去wordpress主题开发编辑器
  • 广东地区建网站的公司有谁用2008做网站服务器
  • 泉州网站建设企业什么样的笔记本电脑适合网站开发
  • 福州建站模板搭建视频优化软件
  • 韩城市网站建设一个做网站的团队需要哪些
  • 自己电脑做服务器上传网站 需要备案吗漳州seo顾问
  • 网站建设栏目怎么介绍兰州网站建设技能论文
  • 网站做app开发最新网站推广
  • 柳城企业网站建设公司西安加盟代理网站建设
  • 做百科需要用什么网站做参考建设互联网站的目的