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

策略模式+工厂模式(案例实践易懂版)

最近,可以说这2025年度,自己更文的次数都大大减少,主要最近大环境不景气,自己职业也受到波及,学习的东西也是因为AI而变得更多,

没办法,你不学,总有人会学,关于AI的我也准备出个专辑,相信绝对帮助到大家

额,好像说多了,言归正传,我们看一下今天的主题:策略模式+工厂模式

本文主要是为了让人懂并会用(哪怕你是一个小白,也能懂!!!)

那你说,我怎么还看不懂啊? 哈哈哈!你过来捶我

本文总纲:

文章目录

    • 场景描述:
    • 1.定义策略接口(核心)
    • 2.实现具体策略类(真正得出不同容量的)
    • 工厂模式统一创建策略对象
    • 最后总结

为了让大家能快速明白,我在这里直接以一个例子,带大家实战中理解,就不放那些一看就劝退的理论术语

这里我们就用罗总之前星巴克的点单(大杯,中杯)问题的实际场景,大白话解释策略模式结合工厂模式的应用

场景描述:

假设现在罗总来到星巴克点一杯咖啡,罗总需要选择 咖啡的杯子规格(超大杯,大杯,中杯),每种杯子规格对应不同的杯子容量

  • 超大杯 591mL 大杯473ML 中杯 354ML

为了灵活应比如罗总所说的杯容量,添加新杯规格容量,我们用策略模式封装不同的规格容量的处理逻辑,并用工厂模式创建这些逻辑对象

1.定义策略接口(核心)

我们定义一个CapacityStrategy接口,这个接口对于后面杯子规格容量策略都需要实现这个接口!

为什么?

因为策略模式的核心也是最重要的就是:定义一系列算法,并封装成独立的类,目的是为了他们之间可以相互替换

比如我买咖啡,我之前选的中杯,我和服务员说不要中杯了给我来个超大杯,这个中杯和超大杯是平等的策略,我就可以替换

//杯子容量策略接口
public interface CapacityStrategy{//不同容量计算方法double calculateCapacity();
}

2.实现具体策略类(真正得出不同容量的)

如上面所述的中杯,大杯,超大杯分别对应不同的策略类

换句话说:就是此类真正干活的,给出到底杯子规格是多少的,如大杯的容量

点过奶茶的都知道吧,你扫码奶茶小程序点餐页面的选择不同规格,其实就是用到了策略模式

好处: 灵活替换算法,代码解耦

超大杯策略

public VentiCapacityStrategy implements CapacityStrategy{@Overridepublic double calculateCapacity(){return 591.0;}
}

大杯策略

public JorumCapacityStrategy implements CapacityStrategy{@Overridepublic double calculateCapacity(){return 473.0;}
}

中杯策略

public MediumCapacityStrategy implements CapacityStrategy{@Overridepublic double calculateCapacity(){return 354.0;}
}

工厂模式统一创建策略对象

这一步,就是你在小程序上选择不同规格的容量如大杯还是中杯就行,不需要你关心后面大杯到底对应多少容量,这一块尤我们创建的工厂模式类来创建对应的策略对象,就是由后台自己指定对应的杯容量

好处:隐藏创建细节,统一的对象管理

//策略工厂
public class CapacityStrategyFactory{//根据不同容量创建返回对应的策略public static CapacityStrategy getStrategy(String capacityType){case "超大杯":return new VentiCapacityStrategy();case "大杯":return new JorumCapacityStrategy();case "中杯":return new MediumCapacityStrategy();default: throw new Exception("此规格暂不支持"+capacityType);}
}

最后一步,就是真正的操作实现,我点完选择的奶茶如大杯规格,就给我做出了大杯

public class Shopper{public static void main(String[] args){//小程序选择的规格容量String type="大杯";//通过工厂获取对应的容量策略对象  创建CapacityStrategy strategy=CapacityStrategyFactory.getStrategy(type);//计算对应的规格容量double amount=strategy.calculateCapacity();//System.out.println("您选择了"+type+",容量是:"+amount+"ml")}
}

最后总结

策略模式: 把变化的部分 (不同规格容量的计算逻辑) 封装成独立的类,目的是为了可以灵活的替换

工厂模式: 把对象的创建过程 封装起来,就是让客户只需要选择要什么就行,不需要知道怎么造

两者结合:既保证了代码的灵活性(策略可替换),又降低了客户端的复杂度(无需关心对象创建)

http://www.lryc.cn/news/592441.html

相关文章:

  • 30、鸿蒙Harmony Next开发:应用文件上传下载,压缩与解压
  • Jfinal+SQLite处理 sqlite数据库执行FIND_IN_SET报错
  • docker--Dockerfile
  • LP-MSPM0G3507学习--04GPIO控制
  • docker--程序自启动
  • 融合优势:SIP 广播对讲联动华为会议 全场景沟通响应提速​
  • http与https的主要区别是什么?
  • openpyxl 流式读取xlsx文件(read_only=true)读不到sheet页中所有行
  • Git语义化提交规范及提交模板设置
  • sqli-labs靶场通关笔记:第27-28a关 union、select过滤
  • 网络安全:使用.NET 检测网络下载文件及其来源
  • pdf格式怎么提取其中一部分张页?
  • 文档处理控件TX Text Control系列教程:使用 C# .NET 将二维码添加到 PDF 文档
  • 从Hyperliquid到AILiquid:一场从极致性能到策略智能的迭代
  • Excel基础:格式化
  • HTTP性能优化实战技术文章大纲
  • LeafletJS 性能优化:处理大数据量地图
  • 深入理解 Redis 集群化看门狗机制:原理、实践与风险
  • 一文讲清楚React性能优化
  • 2025年华为认证之HCIE-云计算方向的报考流程
  • 指定阿里镜像原理
  • Stateflow Chart平替State Transition Table
  • MySQL的基本操作及相关python代码
  • 动态规划 + DFS + 记忆化!Swift 解 LeetCode 329 的实战笔记
  • 期刊论文-图片格式要求
  • 电脑视频常用几种接口
  • 深度学习入门-深度学习简介
  • 五大平台,构建AI创新转化的“同济方案”
  • 密码学基础概念详解:从古典加密到现代密码体系
  • 快速了解pycharm