trait Observer[S] {
def receiveUpdate(subject: S);
}
trait Subject[S] {
this: S =>
private var observers: List[Observer[S]] = Nil
def addObserver(observer: Observer[S]) = observers = observer :: observers
def notifyObservers() = observers.foreach(_.receiveUpdate(this))
}
Этот фрагмент очень похож на тот, который можно найти в Java с некоторыми функциями Scala. Это из блога Дина Уэмплера - http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i
При этом используются некоторые функции Scala, такие как обобщения, обозначенные [S], признаки, которые похожи на интерфейсы Java, но более мощные, :: для добавления наблюдателя в список наблюдателей, и foreach с параметром, использующий _ который оценивает текущий наблюдатель.