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

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

 

定义

策略模式(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. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-11 19:38:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-11 19:38:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-11 19:38:03       87 阅读
  4. Python语言-面向对象

    2024-06-11 19:38:03       96 阅读

热门阅读

  1. 【React】dayjs -- 格式化时间 的使用

    2024-06-11 19:38:03       29 阅读
  2. 作文美文2段

    2024-06-11 19:38:03       28 阅读
  3. Linux网络服务

    2024-06-11 19:38:03       34 阅读
  4. vue面试题十二

    2024-06-11 19:38:03       32 阅读
  5. 2024.6.7 刷题总结

    2024-06-11 19:38:03       24 阅读
  6. 二层三层转发原理【小白总结版】

    2024-06-11 19:38:03       27 阅读
  7. Pyskl:搭建使用(win)

    2024-06-11 19:38:03       32 阅读
  8. GO——泛型

    2024-06-11 19:38:03       25 阅读
  9. 编程基础-算法研究-算法题

    2024-06-11 19:38:03       27 阅读
  10. Jtti:解决服务器应用服务迟缓的步骤和方法

    2024-06-11 19:38:03       34 阅读
  11. uniapp,微信小程序,在map组件外与中的代码区别

    2024-06-11 19:38:03       27 阅读
  12. 指针数组和数组指针作为函数参数使用

    2024-06-11 19:38:03       39 阅读
  13. 智能合约中存储和计算效率漏洞

    2024-06-11 19:38:03       28 阅读
  14. Shell脚本要点和难点以及具体应用和优缺点介绍

    2024-06-11 19:38:03       30 阅读
  15. Pytorch容器

    2024-06-11 19:38:03       38 阅读