转载:Scala系列16:trait实战,trait实现调用链模式

原始链接:https://blog.csdn.net/qq_26442553/article/details/108421596

 

Scala系列16:trait实战,trait实现调用链模式

涤生手记 2020-09-05 17:08:24  528  收藏

分类专栏: Scala与Spark从入门到企业开发 文章标签: trait scala trait使用 scala spark 大数据

版权

目录

1.业务需求

2.业务逻辑剖析

2.1责任链模式

 2.2trait调用链

3.案例展示

3.1步骤

3.2 参考代码


1.业务需求

我们如果要开发一个支付功能,往往需要执行一系列的验证才能完成支付。例如:

  1. 进行支付签名校验
  2. 数据合法性校验
  3. ...

如果将来因为第三方接口支付的调整,需要增加更多的校验规则,此时如何不修改之前的校验代码,来实现扩展呢?

2.业务逻辑剖析

2.1责任链模式

 2.2trait调用链

【尖叫提示】

  1.   类多继承traint方法的调用顺序和构造器的调用顺序是不一致的。
  2.  类继承了多个trait后,可以依次调用多个trait中的同一个方法,只要让多个trait中的同一个方法在最后都依次执行super关键字即可。
  3. 类中调用多个tait中都有这个方法时,首先会从最右边的trait方法开始执行,然后依次往左执行,形成一个调用链条。

3.案例展示

实现一个模拟支付过程的调用链

3.1步骤

  1. 定义一个HandlerTrait特质
    • 定义一个具体的handler方法,打印"处理数据..."
  2. 定义一个DataValidHandlerTrait,继承HandlerTrait特质
    • 重写handler方法,打印"验证数据"
    • 调用父特质的handler方法
  3. 定义一个SignatureValidHandlerTrait,继承HandlerTrait特质
    • 重写Handler方法
    • 打印"检查签名"
    • 调用父特质的handler方法
  4. 创建一个PaymentService类
    • 继承DataValidHandlerTrait
    • 继承SignatureValidHandlerTrait
    • 定义pay方法
      • 打印"准备支付"
      • 调用父特质的handler方法
  5. 添加main方法
    • 创建PaymentService对象实例
    • 调用pay方法

3.2 参考代码

 
  1. package com.robot.scalademo1

  2.  
  3. trait HandlerTrait {

  4. def handle(data:String) = println("处理数据..."+data)

  5. }

  6.  
  7. trait DataValidHanlderTrait extends HandlerTrait {

  8. override def handle(data:String): Unit = {

  9. println("验证数据.."+data)

  10. super.handle(data)

  11. }

  12. }

  13.  
  14. trait SignatureValidHandlerTrait extends HandlerTrait {

  15. override def handle(data: String): Unit = {

  16. println("校验签名..."+data)

  17. super.handle(data)

  18. }

  19. }

  20.  
  21. class PayService extends DataValidHanlderTrait with SignatureValidHandlerTrait {

  22. override def handle(data: String): Unit = {

  23. println("准备支付..."+data)

  24. super.handle(data)

  25. }

  26. }

  27.  
  28. object _08ObjectDemo {

  29.  
  30. def main(args: Array[String]): Unit = {

  31. val service = new PayService

  32. service.handle("支付参数")

  33. }

  34. }/**

  35. 准备支付...支付参数

  36. 校验签名...支付参数

  37. 验证数据..支付参数

  38. 处理数据...支付参数

  39. */

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值