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 }

///////////////////////////////////////////////////////////////////


    

설정

트랙백

댓글