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

设计模式-策略模式 - 努力-

一、策略模式简介

介绍

策略模式是一种行为设计模式,它能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。

应用场景:

  • 1.多个相关类只区别在表现行为不同:当一个系统需要动态地在几种算法或行为中选择一种时。
  • 2.避免使用多重条件选择语句(如if-else或switch-case):如果在一个系统中有很多条件判断语句,可以通过将这些判断分支封装成不同的策略类来避免代码的复杂性。
  • 3.可互换的算法:程序需要支持多种算法,并且这些算法可以在运行时互换。

为什么使用策略模式?

  • 提高灵活性:通过将算法封装在独立的类中,可以轻松地添加、移除或修改算法,而无需修改使用它们的类。
  • 易于扩展:增加新的策略只需实现接口即可,符合开闭原则。
  • 简化复杂逻辑:将复杂的条件判断逻辑分散到各个策略类中,使得主逻辑更加清。

二、设计思想和代码实现

设计思想:

  • step1.编写父类策略接口,定义行为方法。
  • step2.根据需要编写N个具体的策略接口的实现类。
  • step3.初始化 实现类到容器中(一般IOC容器)。
  • step4.在应用时根据标识符从容器中获取对应的处理器实例处理业务接口。

Java代码:

// 如果不使用策略模式则需要类似如下写多个if ... else 代码,比较复杂,不容扩展,代码复用性低
doPremium(Vo vo){if(vo.getCheckRule == 0){//3000 
} else if(vo.getCheckRule == 1){// 5000
} else if(vo.getCheckRule == 2){// 5000
} ...

示例:
在线购物平台,需要根据用户的不同会员等级提供不同的折扣策略。这里就可以使用策略模式来设计。
在使用的时候;亮出会员等级和购买商品的价格就可以得到这个等级对应的购买价格。

1)step1定义策略接口:

package com.it.shop;public interface DiscountStrategy {double calculate(double price);
}

2)step2.实现策略类:
普通会员折扣类 com.it.shop.NormalMemberDiscount

package com.it.shop;public class NormalMemberDiscount implements DiscountStrategy{@Overridepublic double calculate(double price) {//普通会员折扣return price * 0.95;}
}

银牌会员折扣类 com.it.shop.SilverMemberDiscount

金牌会员折扣类 com.it.shop.GoldMemberDiscount

package com.it.shop;public class GoldMemberDiscount implements DiscountStrategy{@Overridepublic double calculate(double price) {//金牌会员折扣return price * 0.85;}
}

可扩展性,可维护性很强;比如需要添加ssvip会员,更优惠。

添加,ssvip更优惠;

@service 注册到IOC容器;前端传和bean一样的名称;

3)step3.策略工厂(初始化):

4)step4.应用策略:

 public static void main(String[] args) {while(true) {//system.out.println("请输入价格:");System.out.println("请输入会员等级:");Scanner scanner = new Scanner(System.in);String memberLevel = scanner.nextLine();System.out.println("请输入商品价格:");double price =  scanner.nextDouble();//根据传递的会员等级, 找到处理这个类型的处理类;//可扩展性,可维护性很强;DiscountStrategy discountStrategy = strategyMap.get(memberLevel);double discountprice = discountStrategy.calculate(price);System.out.println("会员等级为:"+memberLevel+",商品价格为:"+price+",会员折扣价格为:"+discountStrategy.calculate(price));}}
http://www.jsqmd.com/news/389771/

相关文章:

  • python基于微信小程序校园竞赛信息分享系统
  • python基于社交与电商直播家庭园艺商城综合平台
  • Python核心语法-Numpy、Pandas - 努力-
  • 综述不会写?万众偏爱的AI论文网站 —— 千笔AI
  • 基于YOLO11-EfficientViT的辉长岩及其相关岩石类型计算机视觉识别分类系统_1
  • 毕业论文神器!降AI率平台 千笔·降AI率助手 VS Checkjie MBA专属利器
  • 照着用就行:千笔ai写作,人气爆表的一键生成论文工具
  • Flowise 自定义MCP节点远程代码执行漏洞 (CVE-2025-59528) 分析
  • 2026别错过!降AI率软件 千笔·专业降AIGC智能体 VS 知文AI,MBA专属高效之选
  • 对比一圈后,更贴合本科生的AI论文工具,千笔·专业论文写作工具 VS 灵感ai
  • OpenCode 里的 Atlas / Sisyphus / Prometheus区别
  • 真的太省时间!千笔·专业论文写作工具,领军级的AI论文网站
  • 热烈庆祝Ctorch RC1发布! - Ghost
  • Prettier深度解析
  • iPaaS平台:企业数字化转型的核心基础设施
  • 一文讲透|AI论文软件 千笔AI VS 灵感风暴AI,本科生必备神器!
  • 2025年国内评价高的库房货架供应厂家排行榜,贯通式货架/驶入式货架/轻型货架/贯通货架,库房货架供应厂家排名 - 品牌推荐师
  • Babel深度解析
  • Go内存管理与性能优化深度指南:从GC原理到pprof实战
  • 2026常州市信誉好的口播视频智能体搭建平台
  • 2026江苏省口播视频智能体搭建服务商推荐排行
  • 选择大件物流公司:从用户评价看这几家厂家的服务,大件物流/大件运输,大件物流服务商有哪些 - 品牌推荐师
  • python基于敏捷开发的项目任务分配管理系统
  • python基于大数据的起点小说网数据的文本分析可视化系统
  • 干货合集:8个降AI率平台测评,专科生必看的降AI率攻略
  • python基于大数据驱动的旅游行程规划系统 可视化
  • 赶deadline必备! 9个降AI率网站深度测评与推荐
  • 强烈安利! 一键生成论文工具,继续教育专属,千笔·专业学术智能体 VS PaperRed
  • 详细介绍:K-Means 聚类的目标函数:簇内误差平方和
  • K均值聚类方法求解风电功率聚类以及基于拉丁方抽样的样本削减和场景分析MATLAB代码