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