Scala的Trait链式处理(二)

  1.  简单介绍

Trait调用链:在Scala中,支持让类继承多个Trait,依次调用多个Trait中的同一个方法,只要让多个Trait中的同一个方法中,在最后都执行super方法。 

类似设计模式--责任链模式

注意:在类中调用多个Trait中都有的方法时,首先会从最右边的Trait的方法开始执行,形成一个链式处理调用。

作用: 可以解决多类共同 执行的不同的业务业务逻辑的方法冲突问题

  1. 公共的父Trait
package org.yonggan.trait02.chain

trait TraitHandler {
  /**
   * 业务处理的规范
   */
   def handler (data:String){} 
  
}

  • 具体处理角色 1
package org.yonggan.trait02.chain

trait DataVaildHandler extends TraitHandler {

  /**
   * 重写父类的trait
   */
  override def handler(data: String) = {
    println("check data" + data)
    super.handler(data)
  }

}

方法执行结束后注意调用  super.handler(data) 实现执行者角色转递

  • 具体处理角色 2
package org.yonggan.trait02.chain

trait SignatureVailHandler extends TraitHandler {
  
   /**
   * 重写父类的trait
   */
  override def handler(data: String) = {
    println("check Signature " + data)
    super.handler(data)
  }

}

  • 链式处理
package org.yonggan.trait02.chain

/**
 * 在链式调度的过程中 依次 从 右---> 左
 */
class Person(val name:String)  extends SignatureVailHandler with DataVaildHandler{

  def sayHello = {
    println("hello, " + name)
    // 执行trait 调度链
    handler(name)
  }
  
}

  • 结果测试
package org.yonggan.trait02.chain

object AppTest {
  def main(args: Array[String]): Unit = {
    val p =  new Person("yonggan")  
    p.sayHello
  }
}

执行结果

hello, yonggan
check datayonggan
check Signature yonggan




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值