多种异构数据的分析设计方案:使用策略模式+函数式接口

多种异构数据的分析设计方案:聊聊策略模式+函数式接口

定义

策略模式(Strategy Pattern): 定义并封装一系列算法类,并且这些类可以相互替换,可以在运行时根据需要选择不同的算法,而不需要修改客户端流程代码。

策略模式让算法独立于使用它的客户端而变化,也称为政策模式(Policy)。

主要解决,在有多种算法流程相似的情况下,使用许多if...else分支所带来的代码复杂且难以维护的问题。

关键代码:定义共通的函数时接口。

何时使用:一个系统有许多业务分支类,执行的业务逻辑一致,只是具体实现不同。

如何解决:将这些算法封装成一个一个的类,根据需求任意地组合替换。

业务场景:自动化工厂,按照不同维度度统计分析电量消耗,例如:1.楼栋楼层,2.设备类型,3.产品类型, 4.小时日月年等。

伪代码示例:

(每小时)

@FunctionalInterface

public interface HourFun<T,R> {

/**

* @explain analysis:Bean

* @param T:待分析的参数bean

* @return R:分析完毕得到的数据bean

*/

R exeHour(T hourBean);

}

(每天)

@FunctionalInterface

public interface DayFun<T,R> {

/**

* @explain analysis:Bean

* @param T:待分析的参数bean

* @return R:分析完毕得到的数据bean

*/

R exeDay(T dayBean);

}

(每月)

@FunctionalInterface

public interface MonthFun<T,R> {

/**

* @explain analysis:Bean

* @param T:待分析的参数bean

* @return R:分析完毕得到的数据bean

*/

R exeMonth(T monthBean);

}

(每年)

@FunctionalInterface

public interface YearFun<T,R> {

/**

* @explain analysis:Bean

* @param T:待分析的参数bean

* @return R:分析完毕得到的数据bean

*/

R exeYear(T yearBean);

}

(业务流程逻辑:执行分析的框架方法) 此方法是策略模式中比较核心的点。

public void analysis(ParamBean param, HourFun hourFun,DayFun dayFun, MonthFun monthFun,YearFun yearFun){

..............................

......其他业务逻辑代码 ......

..............................

MAKE_HOUR: {

......其他业务逻辑代码 ......

hourFun.exeHour(param);

}

MAKE_DAY: {

dayFun.exeDay(param);

}

MAKE_MONTH: {

......其他业务逻辑代码 ......

monthFun.exeMonth(param);

}

MAKE_YEAR: {

......其他业务逻辑代码 ......

yearFun.exeYear(param);

}

..............................

......其他业务逻辑代码 ......

..............................

}

定义好各种单一统计方案之后,其实我们就要组装策略了。

加载到执行分析的框架方法中。

以下的每个Service,为符合函数式接口的具体实现类。

具体执行(1.楼栋楼层,)

analysis( param, hour1Service, day1Service, month1Service, year1Service);

具体执行(2.设备分类)

analysis( param, hour2Service, day2Service, month2Service, year2Service);

具体执行(3.产品分类)

analysis( param, hour3Service, day3Service, month3Service, year3Service);

相关推荐
追风少年浪子彦13 小时前
Spring Boot 使用自定义 JsonDeserializer 同时支持多种日期格式
java·spring boot·后端
牢七13 小时前
Javan
java
我叫黑大帅13 小时前
六边形架构?小白也能秒懂的「抗造代码秘诀」
java·后端·架构
不穿格子的程序员13 小时前
Java基础篇——JDK新特性总结
java·虚拟线程·jdk新特性
一乐小哥13 小时前
Java8 党狂喜!这篇把 Java9 到 25 的实用新功能讲透了,新手也能直接抄
java
草莓熊Lotso13 小时前
Git 本地操作进阶:版本回退、撤销修改与文件删除全攻略
java·javascript·c++·人工智能·git·python·网络协议
Ka1Yan13 小时前
[数组] - LeetCode 704. 二分查找
java·开发语言·算法·leetcode·职场和发展
合作小小程序员小小店13 小时前
web网页开发,在线%餐饮点餐%系统,基于Idea,html,css,jQuery,java,ssm,mysql。
java·前端·数据库·html·intellij-idea·springboot
SimonKing13 小时前
IntelliJ IDEA 2025.2.x的小惊喜和小BUG
java·后端·程序员
曾帅16814 小时前
idea springboot开发编译所见即所得应用不需要重启
java·spring boot·intellij-idea