-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathZTEST_PATTERN_DECORATOR.abap
More file actions
179 lines (115 loc) · 3.79 KB
/
ZTEST_PATTERN_DECORATOR.abap
File metadata and controls
179 lines (115 loc) · 3.79 KB
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
*&---------------------------------------------------------------------*
*& Report ZTEST_PATTERN_DECORATOR
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ztest_pattern_decorator.
CLASS lcl_a_component DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS: operate ABSTRACT.
ENDCLASS.
CLASS lcl_concrete_component_a DEFINITION INHERITING FROM lcl_a_component.
PUBLIC SECTION.
METHODS: operate REDEFINITION.
ENDCLASS.
CLASS lcl_concrete_component_a IMPLEMENTATION.
METHOD operate.
WRITE:/ 'ConcreteComponentA operates'.
ENDMETHOD.
ENDCLASS.
CLASS lcl_concrete_component_b DEFINITION INHERITING FROM lcl_a_component.
PUBLIC SECTION.
METHODS: operate REDEFINITION.
ENDCLASS.
CLASS lcl_concrete_component_b IMPLEMENTATION.
METHOD operate.
WRITE:/ 'ConcreteComponentB operates'.
ENDMETHOD.
ENDCLASS.
CLASS lcl_a_decorater DEFINITION ABSTRACT INHERITING FROM lcl_a_component.
PUBLIC SECTION.
METHODS: constructor IMPORTING im_component TYPE REF TO lcl_a_component.
PROTECTED SECTION.
DATA: mo_component TYPE REF TO lcl_a_component.
ENDCLASS.
CLASS lcl_a_decorater IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
me->mo_component = im_component.
ENDMETHOD.
ENDCLASS.
CLASS lcl_concrete_decorator1 DEFINITION INHERITING FROM lcl_a_decorater.
PUBLIC SECTION.
METHODS: constructor IMPORTING im_component TYPE REF TO lcl_a_component.
METHODS: operate REDEFINITION.
ENDCLASS.
CLASS lcl_concrete_decorator1 IMPLEMENTATION.
METHOD constructor.
super->constructor( im_component ).
ENDMETHOD.
METHOD operate.
mo_component->operate( ).
WRITE:/ 'ConcreteDecorator1 operates!'.
ENDMETHOD.
ENDCLASS.
CLASS lcl_concrete_decorator2 DEFINITION INHERITING FROM lcl_a_decorater.
PUBLIC SECTION.
METHODS: constructor IMPORTING im_component TYPE REF TO lcl_a_component.
METHODS: operate REDEFINITION.
ENDCLASS.
CLASS lcl_concrete_decorator2 IMPLEMENTATION.
METHOD constructor.
super->constructor( im_component ).
ENDMETHOD.
METHOD operate.
mo_component->operate( ).
WRITE:/ 'ConcreteDecorator2 operates!'.
ENDMETHOD.
ENDCLASS.
CLASS lcl_concrete_decorator3 DEFINITION INHERITING FROM lcl_a_decorater.
PUBLIC SECTION.
METHODS: constructor IMPORTING im_component TYPE REF TO lcl_a_component.
METHODS: operate REDEFINITION.
ENDCLASS.
CLASS lcl_concrete_decorator3 IMPLEMENTATION.
METHOD constructor.
super->constructor( im_component ).
ENDMETHOD.
METHOD operate.
mo_component->operate( ).
WRITE:/ 'ConcreteDecorator3 operates!'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA lo_comp_a TYPE REF TO lcl_a_component.
DATA lo_comp_b TYPE REF TO lcl_a_component.
DATA lo_tmp TYPE REF TO lcl_a_component.
CREATE OBJECT lo_comp_a TYPE lcl_concrete_component_a.
lo_comp_a->operate( ).
WRITE:/.
WRITE:/ '-------- ComponentA ---------'.
WRITE:/.
lo_tmp = lo_comp_a.
CREATE OBJECT lo_comp_a TYPE lcl_concrete_decorator1
EXPORTING
im_component = lo_tmp.
lo_comp_a->operate( ).
WRITE:/.
WRITE:/ '-------- ComponentB ---------'.
WRITE:/.
CREATE OBJECT lo_comp_b TYPE lcl_concrete_component_b.
lo_tmp = lo_comp_b.
CREATE OBJECT lo_comp_b TYPE lcl_concrete_decorator2
EXPORTING
im_component = lo_tmp.
lo_tmp = lo_comp_b.
CREATE OBJECT lo_comp_b TYPE lcl_concrete_decorator3
EXPORTING
im_component = lo_tmp.
lo_tmp = lo_comp_b.
CREATE OBJECT lo_comp_b TYPE lcl_concrete_decorator1
EXPORTING
im_component = lo_tmp.
lo_comp_b->operate( ).