当前位置: 首页 > 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读取)

相关文章:

  • 数据可视化大屏案例落地实战指南:捷码平台7天交付方法论
  • 如何选择专业数据可视化开发工具?为您拆解捷码全功能和落地指南!
  • Unity VR/MR开发-VR开发与传统3D开发的差异
  • Next.js 中间件鉴权绕过漏洞 CVE-2025-29927
  • 【前端】掌握HTML/CSS宽高调整:抓住问题根源,掌握黄金法则
  • Python 网络编程 -- WebSocket编程
  • 从零开始的云计算——番外实战,iptables防火墙项目
  • 压敏电阻的选型都要考虑哪些因素?同时注意事项都有哪些?
  • python执行测试用例,allure报乱码且未成功生成报告
  • 时序数据库IoTDB的UDF Sample算法在数据监控、故障预防的应用
  • Python html 库用法详解
  • 01 Deep learning神经网络的编程基础 二分类--吴恩达
  • Apollo Auto:Cyber RT 与 ROS 通信
  • 面试心得 --- 车载诊断测试常见的一些面试问题
  • LMT86LP模拟温度传感器
  • Mobile App UI自动化locator
  • 【websocket】安装与使用
  • Simplicity studio SDK下载和安装,创建工程
  • 《如何使用MinGW-w64编译OpenCV和opencv_contrib》
  • 如何通过外网访问内网?哪个方案比较好用?跨网远程连接网络知识早知道
  • 父亲节网页制作素材/网站seo收录工具
  • b2b2c商城开发/百度视频seo
  • 做问卷的网站有那些/拼多多代运营公司十大排名
  • 网站开发适合什么工作/微信营销软件
  • 温州市建设工程管理网站/免费男女打扑克的软件
  • 机关政府网站建设/济南网站制作