- 简单介绍
Trait调用链:在Scala中,支持让类继承多个Trait,依次调用多个Trait中的同一个方法,只要让多个Trait中的同一个方法中,在最后都执行super方法。
类似设计模式--责任链模式
注意:在类中调用多个Trait中都有的方法时,首先会从最右边的Trait的方法开始执行,形成一个链式处理调用。
作用: 可以解决多类共同 执行的不同的业务业务逻辑的方法冲突问题
- 公共的父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