Saturday, August 28, 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.scalapackage scala.behavioralimport 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 implementationtrait 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 Implementationclass SomeObservable extends Observableclass SomeObserver extends Observer { override def notification() { println("do something here: SomeObserver") }}class AnotherObserver extends Observer { override def notification() { println("do something here: AnotherObserver") }}// Clientobject 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()}

No comments:

Post a Comment