jasu's blog
블로그 메뉴글
Observer
Programming/Design Patterns
2007. 2. 21. 11:06
1 class CurrentConditionsDisplay implements Observer, DisplayElement{
2 private var temperature:Number;
3 private var humidity:Number;
4 private var pressure:Number;
5 private var weatherData:Subject;
6
7 public function CurrentConditionsDisplay(weatherData:Subject){
8 this.weatherData = weatherData;
9 weatherData.registerObserver(this);
10 }
11 public function update(temperature:Number, humidity:Number, pressure:Number):Void{
12 this.temperature = temperature;
13 this.humidity = humidity;
14 this.pressure = pressure;
15 display();
16 }
17 public function display():Void{
18 trace("Temperature: "+temperature);
19 trace("Humidity: "+humidity);
20 trace("Pressure: "+pressure);
21 trace("----------------------");
22 }
23 }
////////////////////////////////////////////////////////////////
1 interface DisplayElement{
2 public function display():Void;
3 }
////////////////////////////////////////////////////////////////
1 interface Observer{
2 public function update(temp:Number, humidity:Number, pressure:Number):Void;
3 }
///////////////////////////////////////////////////////////////
1 interface Subject{
2 public function registerObserver(o:Observer):Void;
3 public function removeObserver(o:Observer):Void;
4 public function notifyObserver():Void;
5 }
///////////////////////////////////////////////////////////////
1 class WeatherData implements Subject{
2 private var observers:Array;
3 private var temperature:Number;
4 private var humidity:Number;
5 private var pressure:Number;
6
7 public function WeatherData(){
8 observers = new Array();
9 }
10 public function registerObserver(o:Observer):Void{
11 observers.push(o);
12 }
13 public function removeObserver(o:Observer):Void{
14 var lastIndex:Number = observers.length;
15 for(var i=0;i<lastIndex;i++){
16 if(observers[i] == o){
17 observers.splice(i,1);
18 }
19 }
20 }
21 public function notifyObserver():Void{
22 var lastIndex:Number = observers.length;
23 for(var i=0;i< lastIndex;i++){
24 var observer:Observer = Observer(observers[i]);
25 observer.update(temperature, humidity, pressure);
26 }
27 }
28 public function measurementsChanged():Void{
29 notifyObserver();
30 }
31 public function setMeasurements(temperature:Number, humidity:Number, pressure:Number):Void{
32 this.temperature = temperature;
33 this.humidity = humidity;
34 this.pressure = pressure;
35 measurementsChanged();
36 }
37 }
//////////////////////////////////////////////////////////////
1 class WeatherStation{
2 public function WeatherStation(){
3 var weatherData:WeatherData = new WeatherData();
4 var weatherData2:WeatherData = new WeatherData();
5 var currentDisplay:CurrentConditionsDisplay = new CurrentConditionsDisplay(weatherData);
6 var currentDisplay:CurrentConditionsDisplay = new CurrentConditionsDisplay(weatherData2);
7 weatherData.setMeasurements(80,30,23);
8 weatherData2.setMeasurements(11,22,33);
9 weatherData.setMeasurements(22,30,23);
10
11 }
12 }
///////////////////////////////////////////////////////////////////
2 private var temperature:Number;
3 private var humidity:Number;
4 private var pressure:Number;
5 private var weatherData:Subject;
6
7 public function CurrentConditionsDisplay(weatherData:Subject){
8 this.weatherData = weatherData;
9 weatherData.registerObserver(this);
10 }
11 public function update(temperature:Number, humidity:Number, pressure:Number):Void{
12 this.temperature = temperature;
13 this.humidity = humidity;
14 this.pressure = pressure;
15 display();
16 }
17 public function display():Void{
18 trace("Temperature: "+temperature);
19 trace("Humidity: "+humidity);
20 trace("Pressure: "+pressure);
21 trace("----------------------");
22 }
23 }
////////////////////////////////////////////////////////////////
1 interface DisplayElement{
2 public function display():Void;
3 }
////////////////////////////////////////////////////////////////
1 interface Observer{
2 public function update(temp:Number, humidity:Number, pressure:Number):Void;
3 }
///////////////////////////////////////////////////////////////
1 interface Subject{
2 public function registerObserver(o:Observer):Void;
3 public function removeObserver(o:Observer):Void;
4 public function notifyObserver():Void;
5 }
///////////////////////////////////////////////////////////////
1 class WeatherData implements Subject{
2 private var observers:Array;
3 private var temperature:Number;
4 private var humidity:Number;
5 private var pressure:Number;
6
7 public function WeatherData(){
8 observers = new Array();
9 }
10 public function registerObserver(o:Observer):Void{
11 observers.push(o);
12 }
13 public function removeObserver(o:Observer):Void{
14 var lastIndex:Number = observers.length;
15 for(var i=0;i<lastIndex;i++){
16 if(observers[i] == o){
17 observers.splice(i,1);
18 }
19 }
20 }
21 public function notifyObserver():Void{
22 var lastIndex:Number = observers.length;
23 for(var i=0;i< lastIndex;i++){
24 var observer:Observer = Observer(observers[i]);
25 observer.update(temperature, humidity, pressure);
26 }
27 }
28 public function measurementsChanged():Void{
29 notifyObserver();
30 }
31 public function setMeasurements(temperature:Number, humidity:Number, pressure:Number):Void{
32 this.temperature = temperature;
33 this.humidity = humidity;
34 this.pressure = pressure;
35 measurementsChanged();
36 }
37 }
//////////////////////////////////////////////////////////////
1 class WeatherStation{
2 public function WeatherStation(){
3 var weatherData:WeatherData = new WeatherData();
4 var weatherData2:WeatherData = new WeatherData();
5 var currentDisplay:CurrentConditionsDisplay = new CurrentConditionsDisplay(weatherData);
6 var currentDisplay:CurrentConditionsDisplay = new CurrentConditionsDisplay(weatherData2);
7 weatherData.setMeasurements(80,30,23);
8 weatherData2.setMeasurements(11,22,33);
9 weatherData.setMeasurements(22,30,23);
10
11 }
12 }
///////////////////////////////////////////////////////////////////