下面定义一个具体的主题:
*Define concrete subject
*In our example, we define a weather data object which
*implement the subject interface
class weather_data definition.
public section.
* Define the interface
interfaces:
subject.
methods:
* The data change method
measurement_changed,
* Setter method for setting the weather data
set_measurements
importing tem type f
hum type f
pre type f.
private section.
* The structure and internal table of observers
data: begin of r_observers,
observer type ref to observer,
end of r_observers.
data: t_observers like table of r_observers.
* Instance data definition
data hum type f.
data pre type f.
data tem type f.
endclass.
*Implement weather data
class weather_data implementation.
* Implement interface method
method subject~register_observer.
* Get the import observer object
* and add it to observer's table
r_observers-observer = o.
append r_observers to t_observers.
endmethod.
method subject~remove_observer.
* Delete observer
delete t_observers where observer = o.
endmethod.
method subject~notify_observer.
* Notify observers
loop at t_observers into r_observers.
* Update observers' data according to the subject changed data
call method r_observers-observer->update
exporting temp = tem
hum = hum
pre = pre.
endloop.
endmethod.
method measurement_changed.
* When data changed, inform observer
call method subject~notify_observer.
endmethod.
method set_measurements.
* Set data of weather
me->tem = tem.
me->hum = hum.
me->pre = pre.
call method measurement_changed.
endmethod.
endclass.
*In our example, we define a weather data object which
*implement the subject interface
class weather_data definition.
public section.
* Define the interface
interfaces:
subject.
methods:
* The data change method
measurement_changed,
* Setter method for setting the weather data
set_measurements
importing tem type f
hum type f
pre type f.
private section.
* The structure and internal table of observers
data: begin of r_observers,
observer type ref to observer,
end of r_observers.
data: t_observers like table of r_observers.
* Instance data definition
data hum type f.
data pre type f.
data tem type f.
endclass.
*Implement weather data
class weather_data implementation.
* Implement interface method
method subject~register_observer.
* Get the import observer object
* and add it to observer's table
r_observers-observer = o.
append r_observers to t_observers.
endmethod.
method subject~remove_observer.
* Delete observer
delete t_observers where observer = o.
endmethod.
method subject~notify_observer.
* Notify observers
loop at t_observers into r_observers.
* Update observers' data according to the subject changed data
call method r_observers-observer->update
exporting temp = tem
hum = hum
pre = pre.
endloop.
endmethod.
method measurement_changed.
* When data changed, inform observer
call method subject~notify_observer.
endmethod.
method set_measurements.
* Set data of weather
me->tem = tem.
me->hum = hum.
me->pre = pre.
call method measurement_changed.
endmethod.
endclass.