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

本文主要是介绍多种异构数据的分析设计方案1:使用策略模式+函数式接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

 

定义

策略模式(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);

 

 

 

 

 

这篇关于多种异构数据的分析设计方案1:使用策略模式+函数式接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1070998

相关文章

Python 字典 (Dictionary)使用详解

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Nginx安全防护的多种方法

《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命