Observer Pattern e ABAP Objects. - Altervistadesvino.altervista.org/risorse/Observer.pdf ·...

3
1 Observer Pattern e Abap OO http://desvino.altervista.org Observer Pattern e ABAP Objects. Il pattern Observer viene utilizzato solitamente nei casi in cui deve sussistere una relazione tra un oggetto (subject), caratterizzato da uno stato interno, ed una serie di altri oggetti (observers) che reagiscono, e sono quindi congruenti, ai cambi di stato del primo. Class diagram per il pattern – Observer - ABAP è un linguaggio event-driven. Attraverso la gestione nativa degli eventi permette di realizzare il pattern in maniera molto semplice. In particolare, Non abbiamo bisogno di costruire manualmente una collezione di oggetti Observer, utilizziamo piuttosto un evento (EVENT) per la notifica del cambio di stato da parte dell’oggetto Subject ed il metodo SET HANDLER … FOR … per la registrazione degli oggetti Observer. *&---------------------------------------------------------------------* *& Report ZPATTERN_OBSERVER *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZPATTERN_OBSERVER. * Observer Pattern - Subject Class CLASS Subject DEFINITION. PUBLIC SECTION. EVENTS e1 EXPORTING VALUE(p1) TYPE STRING. METHODS ms IMPORTING p2 TYPE STRING. PRIVATE SECTION. DATA l_stato TYPE STRING. ENDCLASS. CLASS Subject IMPLEMENTATION.

Transcript of Observer Pattern e ABAP Objects. - Altervistadesvino.altervista.org/risorse/Observer.pdf ·...

1Observer Pattern e Abap OO http://desvino.altervista.org

Observer Pattern e ABAP Objects.

Il pattern Observer viene utilizzato solitamente nei casi in cui deve sussistere una relazione tra un oggetto (subject), caratterizzato da uno stato interno, ed una serie di altri oggetti (observers) che reagiscono, e sono quindi congruenti, ai cambi di stato del primo.

Class diagram per il pattern – Observer -

ABAP è un linguaggio event-driven. Attraverso la gestione nativa degli eventi permette di realizzare il pattern in maniera molto semplice. In particolare, Non abbiamo bisogno di costruire manualmente una collezione di oggetti Observer, utilizziamo piuttosto un evento (EVENT) per la notifica del cambio di stato da parte dell’oggetto Subject ed il metodo SET HANDLER … FOR … per la registrazione degli oggetti Observer.

*&---------------------------------------------------------------------**& Report ZPATTERN_OBSERVER*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*

REPORT ZPATTERN_OBSERVER.

* Observer Pattern - Subject ClassCLASS Subject DEFINITION. PUBLIC SECTION. EVENTS e1 EXPORTING VALUE(p1) TYPE STRING.

METHODS ms IMPORTING p2 TYPE STRING.

PRIVATE SECTION. DATA l_stato TYPE STRING.ENDCLASS.

CLASS Subject IMPLEMENTATION.

2Observer Pattern e Abap OO http://desvino.altervista.org

METHOD ms. me->l_stato = p2. RAISE EVENT e1 EXPORTING p1 = me->l_stato. ENDMETHOD.ENDCLASS.

* Observer Pattern - Observer ClassCLASS Observer DEFINITION ABSTRACT. PUBLIC SECTION. METHODS mo ABSTRACT FOR EVENT e1 OF Subject IMPORTING p1.ENDCLASS.

* Observer Pattern - Concrete Observer ACLASS ConcreteObsA DEFINITION INHERITING FROM Observer. PUBLIC SECTION. METHODS mo REDEFINITION.ENDCLASS.

CLASS ConcreteObsA IMPLEMENTATION. METHOD mo. WRITE:/ 'Observer A ', p1. ENDMETHOD.ENDCLASS.

* Observer Pattern - Concrete Observer BCLASS ConcreteObsB DEFINITION INHERITING FROM Observer. PUBLIC SECTION. METHODS mo REDEFINITION.ENDCLASS.

CLASS ConcreteObsB IMPLEMENTATION. METHOD mo. WRITE:/ 'Observer B ', p1. ENDMETHOD.ENDCLASS.

CLASS application DEFINITION. PUBLIC SECTION. CLASS-METHODS start.ENDCLASS.

CLASS application IMPLEMENTATION. METHOD start. DATA: lo_subject TYPE REF TO Subject, lo_obsA TYPE REF TO ConcreteObsA, lo_obsB TYPE REF TO ConcreteObsB.

CREATE OBJECT lo_subject.

CREATE OBJECT lo_obsA. SET HANDLER lo_obsA->mo FOR lo_subject.

CREATE OBJECT lo_obsB. SET HANDLER lo_obsB->mo FOR lo_subject.

CALL METHOD lo_subject->ms EXPORTING p2 = 'Wake Up First Time'. CALL METHOD lo_subject->ms EXPORTING p2 = 'Wake Up Second Time'.

ENDMETHOD.ENDCLASS.

START-OF-SELECTION.

3Observer Pattern e Abap OO http://desvino.altervista.org

application=>start( ).

Zpattern_observer.

Risultato finale.