多种异构数据的分析设计方案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

相关文章

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T