package scala.behavioral
import scala.collection.jcl.ArrayList
// Observer = Publisher-Subscriber
// Dependência 1-N onde os N dependentes serão notificados e atualizos a cada mudança de estado do objeto que está sendo observado
// Abstract implementation
trait Observable { // Publisher
val observers = new ArrayList[Observer]()
def notifyObservers() {
for(observer <- observers)
observer.notification()
}
def addObserver(observer:Observer) {
observers += observer
}
def removeObserver(observer:Observer) {
observers -= observer
}
}
trait Observer { // Subscriber
def notification()
}
// Concrete Implementation
class SomeObservable extends Observable
class SomeObserver extends Observer {
override def notification() {
println("do something here: SomeObserver")
}
}
class AnotherObserver extends Observer {
override def notification() {
println("do something here: AnotherObserver")
}
}
// Client
object ObserverClient extends Application {
var observable = new SomeObservable()
var observer1 = new SomeObserver()
var observer2 = new AnotherObserver()
observable.addObserver(observer1)
observable.addObserver(observer2)
observable.notifyObservers()
observable.removeObserver(observer2)
observable.notifyObservers()
}
sábado, 28 de agosto de 2010
Design Patterns em Scala: Observer
Observer é um padrão muito legal, principalmente quando vamos trabalhar com a arquitetura MVC ou parecidas. O padrão MVC 'original' utiliza o padrão observer, mas como só falamos em Web, e os frameworks Web fornecem uma arquitetura MVC sem o observer (sem um Push no client), então vamos esquecendo... Dá para pensar no Observer para Web por exemplo com o framework Comet para Java, consequentemente para Scala.
Segue uma implementação:
Observer.scala
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário