なんじゃくにっき

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

Scala de Design Pattern: Monostate

 Monostateパターン。
インスタンスは複数作られるが、全てのインスタンスが同じ状態にあるパターン。
実装するには変数を全てクラス変数にする。
このパターンを使うくらいならSingletonパターンでいい気がするので、使い道が思い浮かばないパターン。
ただし継承のときの動作は多少違うかも。
Scalaの場合コンパニオンオブジェクト作って・・としないといけないのでSingletonより実装がめんどい。

class Monostate {
def setValue(value: Int) = {
Monostate.value = value
}
def getValue = Monostate.value
}

object Monostate {
var value: Int = 0
}

object Main {
val a = new Monostate
val b = new Monostate
println(a eq b) // false
a.setValue(1)
b.setValue(2)
println(a.getValue) // 2
}