策略模式抽象方法

news/2024/11/6 9:18:44/文章来源:https://www.cnblogs.com/kakaBluce/p/18529233

抽象出一个新的生成器以处理不同的数据源,并且将数据处理逻辑与数据源获取逻辑分离,是一种更好的设计。这种设计模式通常被称为“策略模式”,它允许你在运行时选择不同的策略(数据源)来获取和处理数据,而不需要修改核心逻辑。

实现步骤

以下是如何实现这种设计模式的详细步骤:

1. 定义数据处理接口

定义一个接口来处理从数据源获取的数据。这种接口可以支持多种报表生成策略:

public interface ReportGeneratorStrategy {void generateReport(List<Map<String, Object>> data);
}

2. 实现具体的报表生成策略

例如,单数据报表和客户统计报表各自实现自己的策略:

public class SingleDataReportGenerator implements ReportGeneratorStrategy {@Overridepublic void generateReport(List<Map<String, Object>> data) {// 实现单数据报表生成逻辑}
}public class CustomerStatisticsReportGenerator implements ReportGeneratorStrategy {@Overridepublic void generateReport(List<Map<String, Object>> data) {// 实现客户统计报表生成逻辑}
}

3. 创建一个新的生成器类

这个类用来选择数据源和相应的报表生成策略:

@Service
public class ReportService {public void generateReport(String query, DataService dataService, ReportGeneratorStrategy strategy) {List<Map<String, Object>> data = dataService.getData(query);strategy.generateReport(data);}
}

4. 使用配置和Spring来选择数据源和策略

你可以使用Spring来配置你的应用,以便选择适当的数据源和报表生成策略:

@RestController
@RequestMapping("/report")
public class ReportController {private final ReportService reportService;private final DataService adbLoader; // 假设你用@Bean定义了AdbLoaderprivate final DataService dbService; // 假设你用@Bean定义了DbService@Autowiredpublic ReportController(ReportService reportService, AdbLoader adbLoader, DbService dbService) {this.reportService = reportService;this.adbLoader = adbLoader;this.dbService = dbService;}@GetMapping("/generate")public ResponseEntity<String> generateReport(@RequestParam String query, @RequestParam boolean isSingleData,@RequestParam String dataSourceType) {DataService dataService;if ("adb".equalsIgnoreCase(dataSourceType)) {dataService = adbLoader;} else {dataService = dbService;}ReportGeneratorStrategy strategy;if (isSingleData) {strategy = new SingleDataReportGenerator();} else {strategy = new CustomerStatisticsReportGenerator();}reportService.generateReport(query, dataService, strategy);return ResponseEntity.ok("Report generated successfully");}
}

5. 配置文件

通过配置文件指定数据源类型和其他参数:

dataSource.type=db // or adb

优点

  1. 分离关注点:数据获取和报表生成逻辑是独立的,可以分别更改。
  2. 可扩展性:可以轻松添加新类型的数据源和报表生成策略。
  3. 更少的代码修改:通过参数化的方式,减少对旧代码的侵入性修改。

这种设计提高了代码的灵活性和可维护性,使得你能够根据业务需求动态地选择数据源和报表生成策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/827499.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

教师提前批试讲-注意事项

教师提前批试讲-注意事项

大白菜装系统

在平时工作中,作为程序员,最苦逼的是公司的电脑坏了,都找你。我想说我是程序员,不是修电脑的,但是架不住小姐姐的热情,还是做了。 装系统流程: 第一步:前期准备 1、使用【大白菜】制作U盘启动盘。 2、查询机型的U盘启动快捷键。 3、准备一个ISO/GHO镜像。 第二步:插入…

实验11:装饰模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解装饰模式的动机,掌握该模式的结构; 2、能够利用装饰模式解决实际问题。[实验任务一]:手机功能的升级用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而Ja…

Pbootcms网站,从Apache切换为Nginx后网站打不开

打开网站设置登录宝塔面板。 选择需要配置的网站,点击“设置”。进入伪静态设置在网站设置页面中,找到并点击“伪静态”选项卡。添加Nginx伪静态规则在伪静态设置中,清空原有规则或选择自定义规则。 输入以下Nginx伪静态规则:location / {if (!-e $request_filename){rewri…

2024/11/06

软件设计 实验10:组合模式 用透明组合模式实现教材中的“文件夹浏览”这个例子。 类图 public abstract class AbstractFile {public abstract void add(AbstractFile element);public abstract void remove(AbstractFile element);public abstract void display(int depth); …

SQLSTATE[HY000] [1045] Access denied for user ‘root‘@‘localhost‘ (using password: YES)

错误解析错误代码:SQLSTATE[HY000] [1045] 错误信息:Access denied for user ‘root’@‘localhost’ (using password: YES)可能的原因密码错误:提供的密码与数据库中存储的密码不匹配。 用户权限问题:用户root可能没有从localhost访问数据库的权限。 配置文件问题:MySQL…

帝国CMS更改域名后信息地址中的域名不变解决方法

修改系统参数设置进入“系统参数设置 - 基本属性 - 网站地址”,设置为 /。 不要填写具体的域名,以避免信息地址变成绝对地址。更新信息页地址进入“系统 - 数据更新 - 更新信息页地址”,选择相应的数据表,点击“扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年…

帝国CMS系统后台批量删除不带标题图片信息

执行SQL语句删除不带标题图片的信息:delete from [表前缀]_ecms_news where titlepic = ; delete from [表前缀]_ecms_news_index where id not in (select id from [表前缀]_ecms_news); delete from [表前缀]_ecms_news_data_1 where id not in (select id from [表前缀]_ec…

帝国CMS留言模板提示请输入姓名,邮箱与留言内容解决方法

检查表单提交:确认提交地址、POST 数据和表单字段正确。 在表单中添加隐藏字段 bid: <input name="bid" type="hidden" value="分类ID" />扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HT…

信息安全新篇章:车企图纸安全外发创新方案!

车企的图纸在其业务流程中会与多个环节产生交集,并涉及到图纸安全外发传输。以下是主要涉及的环节及图纸传输发送的相关情况: 1.市场分析报告、概念草图、初步布置图等图纸:需要在设计团队内部进行传输,以供讨论和修改。同时,需要发送给供应商或合作伙伴进行初步评估和反馈…

宝塔安装好后网址打不开的可能原因及解决方法

检查域名解析确认域名是否正确解析到服务器的IP地址。 可以使用 ping 命令测试域名解析是否正确。检查服务器网络确认服务器的网络连接是否正常。 尝试从服务器内部访问外部网站,确保网络畅通。检查防火墙设置确认服务器的防火墙设置是否允许HTTP/HTTPS流量通过。 默认情况下,…

腾讯云服务器配置windows安装宝塔

在腾讯云服务器上配置 Windows 并安装宝塔面板的步骤如下: 1. 购买和配置腾讯云 Windows 服务器登录腾讯云控制台:访问 腾讯云官网 并登录你的账号。创建 Windows 服务器:进入“云服务器”页面,点击“创建实例”。 选择 Windows 操作系统,例如 Windows Server 2019 数据中…