技术开发 频道

ABAP与设计模式之观察者模式

    下面定义一个具体的主题:

    *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.
0
相关文章