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

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

 

定义

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

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

 

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

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

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

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

 

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

 

伪代码示例:

 

这是策略模式的一种变体:

把业务逻辑代码抽取到单独的函数里面,但如果有大量的条件,依然会造成类的膨胀和难以维护。

 

定义函数式接口

 

    @FunctionalInterface

    public interface MyFunction<P1, P2, P3, R> {

            /**

             */

            R exeFunction(P1 param1, P2 param2, P3 param3);

    }

 

定义业务类

 

    @Service

    public class MyServiceImpl{

            // 使用 map 存储具体策略执行逻辑函数

            // 特点:通过key从map里面获取,替换通过if-else获取策略类,减少了复杂度,

            // 特点:减少class,但增加 method,增加新的策略函数,既可以定义在新class里面,也可以写在已有的class里面。

            private Map<String, MyFunction> FUN_MAP = new HashMap<>();

            @PostConstruct

            public void beanInit() {

                    //

                    FUN_MAP.put("KEY1", (param1, param2, param3) -> this.exeKey1Fun(param1, param2, param3));

                    //

                    FUN_MAP.put("KEY2", (param1, param2, param3) -> this.exeKey2Fun(param1, param2, param3));

                    //

                    FUN_MAP.put("KEY3", (param1, param2, param3) -> this.exeKey3Fun(param1, param2, param3));

                    //

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

            }

 

 /**

  * 使用

  */

 public void myServiceExe(Key key, P1 param1, P2 param2, P3 param3){

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

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

  // 替换通过if-else获取策略类,通过key从map里面获取

  MyFunction fun = FUN_MAP.get(key);

  if (fun != null) {

     R rrr = fun.exeFunction(param1, param2, param3);

  }

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

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

 }

 

 /**

  * 定义具体实现

  */

 private R exeKey1Fun(P1 param1, P2 param2, P3 param3){

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

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

 }

 /**

  * 定义具体实现

  */

 private R exeKey2Fun(P1 param1, P2 param2, P3 param3){

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

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

 }

 /**

  * 定义具体实现

  */

 private R exeKey3Fun(P1 param1, P2 param2, P3 param3){

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

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

 }

    }

 

 

 

 

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
为了实现多源异构数据同步,需要设计一个同步工具来处理不同类型的数据和不同格式的数据。以下是详细设计: 1. 数据源适配器:根据不同类型的数据源,设计不同的适配器来获取数据。例如,可以有适配器来获取关系数据数据、文本文件数据、XML数据、JSON数据等。 2. 数据目标适配器:根据不同类型的数据目标,设计不同的适配器来将数据写入目标。例如,可以有适配器来将数据写入关系数据库、文本文件、NoSQL数据库等。 3. 数据转换器:由于不同数据源和数据目标之间存在数据格式差异,需要设计一个数据转换器来将数据从源格式转换为目标格式。例如,可以将XML数据转换为JSON数据或关系数据数据。 4. 数据同步引擎:设计一个数据同步引擎来协调数据源适配器、数据目标适配器和数据转换器的工作。引擎可以定期从数据源适配器获取数据,将数据通过数据转换器转换为目标格式,并通过数据目标适配器写入目标。 5. 数据同步策略:设计一种数据同步策略来确定何时同步数据以及如何同步数据。例如,可以根据定时任务或触发器来同步数据,也可以根据数据的增量或全量来同步数据。 6. 错误处理机制:设计一个错误处理机制来处理数据同步过程中的错误。例如,可以记录错误日志、自动重试或发送警报通知管理员。 7. 安全性和权限控制:考虑数据同步过程中的安全性和权限控制问题。例如,可以对数据进行加密、验证用户身份、控制用户访问权限等。 8. 性能优化:考虑数据同步过程中的性能优化问题。例如,可以通过批量处理、并发处理、缓存数据等方式提高数据同步的效率。 以上是多源异构数据同步工具的详细设计。具体实现需要根据不同的场景和需求进行定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值