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 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() }

Nenhum comentário:

Postar um comentário