Decoratorパターンを実装する。
既存のクラスのインターフェイスを保ったまま振る舞いを変えるのがDecorator。
Scalaではnewするときにもtraitを付与できるのを利用する。
trait Animal {
def roar: Unit
}class AnimalImpl extends Animal{
def roar = println("ぼく、どうぶつ!")
}trait WingedAnimal extends Animal {
abstract override def roar = {
super.roar
println("ぼく、とべるよ!")
}
}trait FangedAnimal extends Animal {
abstract override def roar = {
super.roar
println("はむはむしてやんよ!")
}
}object Main {
def main(args: Array[String])= {
val doragon = new AnimalImpl with WingedAnimal with FangedAnimal
doragon.roar
}
}// 【実行結果】
// ぼく、どうぶつ!
// ぼく、とべるよ!
// はむはむしてやんよ!