なんじゃくにっき

プログラミングの話題中心。

Scala de Design Pattern: Chain of Responsibility

 Chain of Responsibilityパターン。
ケロロでやってみた。

sealed abstract class 階級 { val 値: Int }
object 軍曹 extends 階級 { val 値 = 6 }
object 伍長 extends 階級 { val 値 = 5 }
object 二等兵 extends 階級 { val 値 = 1 }

trait ケロン星人 {
val 名前: String
val 階級値: Int
var 部下: ケロン星人 = null
def 伝達(メッセージ: String, 情報の機密LV: 階級): Unit = {
println(名前 + ": " + メッセージ)
if ((部下 != null) && (部下.階級値 >= 情報の機密LV.値))
部下.伝達(メッセージ, 情報の機密LV)
}
}

object ケロロ extends ケロン星人 {
val 名前 = "ケロロ軍曹"
val 階級値 = 軍曹.値
}

object ギロロ extends ケロン星人 {
val 名前 = "ギロロ伍長"
val 階級値 = 伍長.値
}

object タママ extends ケロン星人 {
val 名前 = "タママ二等兵"
val 階級値 = 二等兵.値
}

object Main {
def main(args: Array[String]) = {
ケロロ.部下 = ギロロ
ギロロ.部下 = タママ

ケロロ.伝達("ガンプラを買いに行くであります", 二等兵)
ケロロ.伝達("地球を征服するであります", 伍長)
}
}