なんじゃくにっき

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

Scala de Design Pattern: Observer

Observerパターン。
 

trait Subject {
var observerCollection = List[Observer]()
def addObserver(o: Observer)
def notifyObservers
}

trait Observer {
def notify(value: Int): Unit
}

object Main {
def main(args: Array[String]) = {
val concreteSubject = new Subject {
var i = 0
def addObserver(o: Observer) = observerCollection :+= o
def notifyObservers =
observerCollection.foreach({ i = i + 1; _.notify(i)})
}

val observerA = new Observer {
def notify(value: Int) = println("ObserverA "+ value)
}
val observerB = new Observer {
def notify(value: Int) = println("ObserverB "+ value)
}

concreteSubject.addObserver(observerA)
concreteSubject.addObserver(observerB)

concreteSubject.notifyObservers
concreteSubject.notifyObservers
}
}

// 【実行結果】
// ObserverA 1
// ObserverB 1
// ObserverA 2
// ObserverB 2