REPORT z_facade.
CLASS lcl_data_read DEFINITION.
PUBLIC SECTION.
METHODS: constructor.
ENDCLASS.
CLASS lcl_write_alv DEFINITION.
PUBLIC SECTION.
methods: display_alv
ENDCLASS.
CLASS lcl_write_log DEFINITION.
PUBLIC SECTION.
methods: display_list
ENDCLASS.
CLASS lcl_facade DEFINITION.
PUBLIC SECTION.
METHODS: process_report IMPORTING iv_report_type TYPE char1.
ENDCLASS.
CLASS lcl_data IMPLEMENTATION.
METHOD constructor.
WRITE: / 'Get Data'.
ENDMETHOD.
ENDCLASS.
CLASS lcl_write_alv IMPLEMENTATION.
METHOD display.
WRITE: / 'Writing data in ALV'.
ENDMETHOD.
ENDCLASS.
CLASS lcl_write_list IMPLEMENTATION.
METHOD display.
WRITE: / 'writing data in list'.
ENDMETHOD.
ENDCLASS.
CLASS lcl_facade IMPLEMENTATION.
METHOD process_report.
DATA: lo_data TYPE REF TO lcl_data.
CREATE OBJECT lo_data.
DATA: lo_write_alv TYPE REF TO lcl_write_alv.
DATA: lo_write_list TYPE REF TO lcl_write_list.
IF iv_write_type = 'A'.
CREATE OBJECT lo_write TYPE lcl_write_alv.
ELSE.
CREATE OBJECT lo_write TYPE lcl_write_list.
ENDIF.
lo_write->display( ).
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA: lo_facade TYPE REF TO lcl_facade.
CREATE OBJECT lo_facade.
lo_facade->process_report( iv_write_type = 'A' ).