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

工厂模式 + 模板方法模式 + 策略模式的适用场景

这三种设计模式可以结合使用,适用于以下场景:

  1. 固定流程 + 动态步骤实现
    当系统有一个固定的处理流程(模板方法模式),但某些步骤的具体实现需要动态切换(策略模式),且这些步骤的实现对象需要通过工厂来创建(工厂模式)。

  2. 多维度变化场景

    • 流程的整体骨架固定(模板方法模式)。
    • 流程中的某些步骤存在多种实现方式(策略模式)。
    • 步骤的具体实现需要根据参数动态创建(工厂模式)。
  3. 常见案例

    • 数据导出(固定流程:准备数据 → 生成文件 → 保存文件,文件格式由策略决定)。
    • 支付系统(固定流程:验签 → 扣款 → 通知,支付方式由策略决定)。
    • 游戏技能释放(固定流程:检测目标 → 计算伤害 → 播放动画,伤害计算逻辑由策略决定)。

Java 代码案例:数据导出系统

1. 策略模式:定义文件生成策略
// 文件生成策略接口
interface ExportStrategy {void generateFile(String data);
}// CSV 生成策略
class CsvExportStrategy implements ExportStrategy {@Overridepublic void generateFile(String data) {System.out.println("生成 CSV 文件: " + data);}
}// Excel 生成策略
class ExcelExportStrategy implements ExportStrategy {@Overridepublic void generateFile(String data) {System.out.println("生成 Excel 文件: " + data);}
}
2. 工厂模式:创建策略对象
class ExportStrategyFactory {public static ExportStrategy getStrategy(String type) {if ("csv".equalsIgnoreCase(type)) {return new CsvExportStrategy();} else if ("excel".equalsIgnoreCase(type)) {return new ExcelExportStrategy();}throw new IllegalArgumentException("不支持的格式: " + type);}
}
3. 模板方法模式:定义导出流程
abstract class DataExporter {private ExportStrategy strategy;public DataExporter(ExportStrategy strategy) {this.strategy = strategy;}// 模板方法:定义固定流程public final void export() {String data = prepareData();strategy.generateFile(data);saveFile();}// 抽象方法:由子类实现数据准备逻辑protected abstract String prepareData();// 固定步骤:保存文件private void saveFile() {System.out.println("保存文件到服务器");}
}// 具体子类:销售数据导出
class SalesDataExporter extends DataExporter {public SalesDataExporter(ExportStrategy strategy) {super(strategy);}@Overrideprotected String prepareData() {System.out.println("准备销售数据...");return "销售数据,2023,100000";}
}
4. 客户端调用
public class Client {public static void main(String[] args) {// 用户选择导出类型String exportType = "csv";// 工厂创建策略对象ExportStrategy strategy = ExportStrategyFactory.getStrategy(exportType);// 模板方法执行固定流程(策略对象注入)DataExporter exporter = new SalesDataExporter(strategy);exporter.export();}
}
输出结果
准备销售数据...
生成 CSV 文件: 销售数据,2023,100000
保存文件到服务器

模式协作关系

  1. 工厂模式:封装策略对象的创建过程,客户端无需关心具体实现类。
  2. 模板方法模式:固定导出流程的骨架(准备数据 → 生成文件 → 保存)。
  3. 策略模式:将文件生成逻辑解耦,支持动态切换 CSV/Excel 等格式。

这种组合模式提高了代码的可扩展性和可维护性,新增文件格式只需添加新的策略类,无需修改流程代码。

其他案例:数据库连接
抽象工厂模式:创建不同数据库类型的执行器(传入type得到连接器)
模板方法模式:封装JDBC操作通用流程
策略模式:不同数据库差异化实现(如excel读取)

http://www.xdnf.cn/news/889147.html

相关文章:

  • 消息的幂等性
  • 【笔记】MSYS2 的 MINGW64 环境 全面工具链
  • 3DEXPERIENCE参考属性和实例属性的获取
  • VUE混合开发用哪个PHP框架好?
  • 三级等保框架下质检 LIMS 系统违规操作溯源技术应用实践
  • 极昆仑智慧与数元灵科技达成战略合作
  • redis配置及优化
  • YOLOv8 × VisDrone 全流程实战:训练你的无人机识别模型 AI(第一部分:数据集准备)
  • 25.6.5学习总结
  • Git操作记录
  • 60天python训练计划----day45
  • 如何开发一个成功的产品
  • OptiStruct结构分析与工程应用:无限元分析指南
  • SpringBoot自动化部署实战技术文章大纲
  • 网络层协议
  • 【电赛培训课程】运算放大器及其应用电路设计
  • DNS攻击类型有哪些?如何应对DNS攻击威胁?
  • 网络包在 Linux 中的处理流程
  • echarts在uniapp中使用安卓真机运行时无法显示的问题
  • C及C++编译链接过程详解
  • c++ Base58编码解码
  • 【华为云Astro-服务编排】服务编排中图元的使用与配置
  • 【Android基础回顾】四:ServiceManager
  • gc2053驱动学习笔记
  • CppCon 2015 学习:Concurrency TS Editor’s Report
  • nvidia系列教程-Usb otg模式修改为host模式
  • 从理论崩塌到新路径:捷克科学院APL Photonics论文重构涡旋光技术边界
  • 设计模式-2 结构型模式
  • 轻触开关是什么?
  • Web前端之隐藏元素方式的区别、Vue循环标签的时候在同一标签上隐藏元素的解决办法、hidden、display、visibility