forked from moreus/ABAPDesignPattern
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathzdp_abstractfactory.abap
133 lines (108 loc) · 2.91 KB
/
zdp_abstractfactory.abap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
*&---------------------------------------------------------------------*
*& Report ZDP_ABSTRACTFACTORY
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zdp_abstractfactory.
CLASS abs_data DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS: read_data ABSTRACT.
ENDCLASS.
CLASS data_from_file DEFINITION INHERITING FROM abs_data.
PUBLIC SECTION.
METHODS: read_data REDEFINITION.
ENDCLASS.
CLASS data_from_file IMPLEMENTATION.
METHOD read_data.
WRITE: / 'Reading data from file'.
ENDMETHOD.
ENDCLASS.
CLASS data_from_db DEFINITION INHERITING FROM abs_data.
PUBLIC SECTION.
METHODS: read_data REDEFINITION.
ENDCLASS.
CLASS data_from_db IMPLEMENTATION.
METHOD read_data.
WRITE: / 'Reading data from Database Table'.
ENDMETHOD.
ENDCLASS.
CLASS abs_print DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS: write_data ABSTRACT.
ENDCLASS.
CLASS print_alv DEFINITION INHERITING FROM abs_print.
PUBLIC SECTION.
METHODS: write_data REDEFINITION.
ENDCLASS.
CLASS print_alv IMPLEMENTATION.
METHOD write_data.
WRITE: / 'Writing data into ALV'.
ENDMETHOD.
ENDCLASS.
CLASS print_simple DEFINITION INHERITING FROM abs_print.
PUBLIC SECTION.
METHODS: write_data REDEFINITION.
ENDCLASS.
CLASS print_simple IMPLEMENTATION.
METHOD write_data.
WRITE: / 'Writing data in classic - This is actually classic'.
ENDMETHOD.
ENDCLASS.
CLASS REPORT DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS: get_data ABSTRACT,
print_data ABSTRACT.
ENDCLASS.
CLASS simple_report DEFINITION INHERITING FROM REPORT.
PUBLIC SECTION.
METHODS: get_data REDEFINITION.
METHODS: print_data REDEFINITION.
ENDCLASS.
CLASS simple_report IMPLEMENTATION.
METHOD get_data.
DATA: lo_data TYPE REF TO data_from_file.
CREATE OBJECT lo_data.
lo_data->read_data( ).
ENDMETHOD.
METHOD print_data.
DATA: lo_print TYPE REF TO print_simple.
CREATE OBJECT lo_print.
lo_print->write_data( ).
ENDMETHOD.
ENDCLASS.
CLASS complex_report DEFINITION INHERITING FROM REPORT.
PUBLIC SECTION.
METHODS: get_data REDEFINITION.
METHODS: print_data REDEFINITION.
ENDCLASS.
CLASS complex_report IMPLEMENTATION.
METHOD get_data.
DATA: lo_data TYPE REF TO data_from_db.
CREATE OBJECT lo_data.
lo_data->read_data( ).
ENDMETHOD.
METHOD print_data.
DATA: lo_print TYPE REF TO print_alv.
CREATE OBJECT lo_print.
lo_print->write_data( ).
ENDMETHOD.
ENDCLASS.
CLASS lcl_main_app DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: RUN.
ENDCLASS.
CLASS lcl_main_app IMPLEMENTATION.
METHOD RUN.
DATA: lo_report TYPE REF TO REPORT.
CREATE OBJECT lo_report TYPE simple_report.
lo_report->get_data( ).
lo_report->print_data( ).
CREATE OBJECT lo_report TYPE complex_report.
lo_report->get_data( ).
lo_report->print_data( ).
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
lcl_main_app=>run( ).