10.12.2012 Views

ActionScript 3.0 Design Patterns.pdf - VideoTutorials-bg.com

ActionScript 3.0 Design Patterns.pdf - VideoTutorials-bg.com

ActionScript 3.0 Design Patterns.pdf - VideoTutorials-bg.com

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Example 8-8. ConcreteObserver.as (continued)<br />

}<br />

class ConcreteObserver implements Observer<br />

{<br />

private var light:String;<br />

function ConcreteObserver( )<br />

{<br />

trace("=Concrete Observer=");<br />

}<br />

public function update(light:String):void<br />

{<br />

this.light=light;<br />

}<br />

}<br />

The update( ) function is tied into the ConcreteSubject class as a parameter. So all<br />

instances of the ConcreteObserver are welded to the single source of updating done<br />

by the concrete subject’s notification function.<br />

Working the Observer<br />

Now we can examine how all the parts work together. In the script that implements<br />

the program, we need to create instances of both the ConcreteSubject and<br />

ConcreteObserver classes. Then, we will need to subscribe observers to the<br />

ConcreteSubject instances. Also, just to be sure that everything’s working correctly,<br />

we should unsubscribe at least one observer. In order to test the overall functionality,<br />

we need to change the state we’re observing using the setLight( ) method to different<br />

values. Only those observer instances subscribed should be able to see the<br />

changes. By first subscribing observers, and then unsubscribing at least one, we<br />

should be able to see if everything’s working as expected. Example 8-9 implements<br />

the Observer design pattern. Save the code as TestSub.as.<br />

Example 8-9. TestSub.as<br />

package<br />

{<br />

import flash.display.Sprite;<br />

public class TestSub extends Sprite<br />

{<br />

public function TestSub( )<br />

{<br />

var mySub:ConcreteSubject=new ConcreteSubject( );<br />

var subObserver:Observer=new ConcreteObserver( );<br />

var subObserver2:Observer=new ConcreteObserver( );<br />

var subObserver3:Observer=new ConcreteObserver( );<br />

mySub.subscribeObserver(subObserver);<br />

//The subObserver is passed as an instance of Observer<br />

supertype<br />

mySub.subscribeObserver(subObserver2);<br />

mySub.subscribeObserver(subObserver3);<br />

Minimalist Abstract Observer | 293

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!