File tree 4 files changed +51
-0
lines changed
4 files changed +51
-0
lines changed Original file line number Diff line number Diff line change
1
+ package ui
2
+
3
+ import observer ._
4
+
5
+ class ObservableButton (name : String ) extends Button (name) with Subject {
6
+ override def click () = {
7
+ super .click()
8
+ println(" this is a test" )
9
+ notifyObservers
10
+ }
11
+ }
12
+
13
+ class ButtonCounter {
14
+ var count = 0
15
+ def receiveUpdate (subject : Any ) = count += 1
16
+ }
Original file line number Diff line number Diff line change
1
+ package observer
2
+
3
+ trait Subject {
4
+ type Observer = { def receiveUpdate (subject : Any ) }
5
+
6
+ private var observers = List [Observer ]()
7
+ def addObserver (observer : Observer ) = observers ::= observer
8
+ def notifyObservers = observers foreach(_.receiveUpdate(this ))
9
+ }
10
+
Original file line number Diff line number Diff line change
1
+ package ui
2
+
3
+ import org .specs ._
4
+ import observer ._
5
+
6
+ object ButtonObserverSpec extends Specification {
7
+ " A button observer" should {
8
+ " observer button clicks" in {
9
+ val observableButton = new ObserverableButton (" Testing" )
10
+ val buttonObserver = new ButtonCounter
11
+ observableButton addObserver buttonObserver
12
+
13
+ for (i <- 1 to 3 ) observableButton.click()
14
+ buttonObserver.count mustEqual 3
15
+ }
16
+ }
17
+ }
Original file line number Diff line number Diff line change
1
+ package ui
2
+
3
+ abstract class Widget
4
+
5
+ class Button (val name : String ) extends Widget {
6
+ def click () = println(" the user clicked something" )
7
+ }
8
+
You can’t perform that action at this time.
0 commit comments