前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >scala的trait实现调用链模式

scala的trait实现调用链模式

作者头像
Java架构师必看
发布2021-12-08 16:34:49
3820
发布2021-12-08 16:34:49
举报
文章被收录于专栏:Java架构师必看

scala的trait实现调用链模式

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说scala的trait实现调用链模式,希望能够帮助大家进步!!!

trait实现调用链模式

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

例如:

进行支付签名校验

数据合法性校验

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

责任链模式

trait调用链

类继承了多个trait后,可以依次调用多个trait中的同一个方法,只要让多个trait中的同一个方法在最后都依次执行super关键字即可。类中调用多个tait中都有这个方法时,首先会从最右边的trait方法开始执行,然后依次往左执行,形成一个调用链条。

示例

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

步骤

定义一个HandlerTrait特质

定义一个具体的handler方法,打印"处理数据…"

定义一个DataValidHandlerTrait,继承HandlerTrait特质

重写handler方法,打印"验证数据"

调用父特质的handler方法

定义一个SignatureValidHandlerTrait,继承HandlerTrait特质

重写Handler方法

打印"检查签名"

调用父特质的handler方法

创建一个PaymentService类

继承DataValidHandlerTrait

继承SignatureValidHandlerTrait

定义pay方法

打印"准备支付"

调用父特质的handler方法

添加main方法

创建PaymentService对象实例

调用pay方法

参考代码:

代码语言:javascript
复制
trait HandlerTrait { 
   
    def handle(data:String) = println("处理数据...")
}

trait DataValidHanlderTrait extends HandlerTrait { 
   
    override def handle(data:String): Unit = { 
   
        println("验证数据...")
        super.handle(data)
    }
}

trait SignatureValidHandlerTrait extends HandlerTrait { 
   
    override def handle(data: String): Unit = { 
   
        println("校验签名...")
        super.handle(data)
    }
}

class PayService extends DataValidHanlderTrait with SignatureValidHandlerTrait { 
   
    override def handle(data: String): Unit = { 
   
        println("准备支付...")
        super.handle(data)
    }
}

def main(args: Array[String]): Unit = { 
   
    val service = new PayService
    service.handle("支付参数")
}

// 程序运行输出如下:
// 准备支付...
// 检查签名...
// 验证数据...
// 处理数据...

结果:

今天文章到此就结束了,感谢您的阅读,Java架构师必看祝您升职加薪,年年好运。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档