-
Notifications
You must be signed in to change notification settings - Fork 48
/
Copy pathzdp_flyweight.abap
122 lines (101 loc) · 2.93 KB
/
zdp_flyweight.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
*&---------------------------------------------------------------------*
*& Report ZDP_FLYWEIGHT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zdp_flyweight.
CLASS flyweight DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS:
operation ABSTRACT IMPORTING iv_extrincicstate TYPE i.
ENDCLASS.
CLASS concrete_flyweight DEFINITION INHERITING FROM flyweight.
PUBLIC SECTION.
METHODS:
operation REDEFINITION.
ENDCLASS.
CLASS concrete_flyweight IMPLEMENTATION.
METHOD operation.
WRITE: /5(20) 'ConcreteFlyweight', iv_extrincicstate.
ENDMETHOD.
ENDCLASS.
CLASS unshared_concrete_flyweight DEFINITION INHERITING FROM flyweight.
PUBLIC SECTION.
METHODS:
operation REDEFINITION.
ENDCLASS.
CLASS unshared_concrete_flyweight IMPLEMENTATION.
METHOD operation.
WRITE: /5(20) 'Unshared Concrete Flyweight', iv_extrincicstate.
ENDMETHOD.
ENDCLASS.
CLASS flyweight_factory DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF ty_flyweight,
key(1) TYPE c
, value TYPE REF TO concrete_flyweight
, END OF ty_flyweight.
METHODS:
constructor
, getflyweight IMPORTING iv_key TYPE c
RETURNING VALUE(ro_value) TYPE REF TO flyweight.
PRIVATE SECTION.
DATA flyweights TYPE HASHED TABLE OF ty_flyweight WITH UNIQUE KEY key.
ENDCLASS.
CLASS flyweight_factory IMPLEMENTATION.
METHOD constructor.
DATA: cf TYPE REF TO concrete_flyweight
,buffer TYPE ty_flyweight .
CREATE OBJECT cf.
buffer-key = 'X'.
buffer-value = cf.
INSERT buffer INTO TABLE flyweights.
CREATE OBJECT cf.
buffer-key = 'Y'.
buffer-value = cf.
INSERT buffer INTO TABLE flyweights.
CREATE OBJECT cf.
buffer-key = 'Z'.
buffer-value = cf.
INSERT buffer INTO TABLE flyweights.
ENDMETHOD.
METHOD getflyweight.
DATA buffer TYPE ty_flyweight.
READ TABLE flyweights WITH TABLE KEY key = iv_key INTO buffer.
ro_value = buffer-value.
ENDMETHOD.
ENDCLASS.
CLASS mainapp DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
main.
ENDCLASS.
CLASS mainapp IMPLEMENTATION.
METHOD main.
DATA: extrincicstate TYPE i
,f TYPE REF TO flyweight_factory
,fx TYPE REF TO flyweight
,fy TYPE REF TO flyweight
,fz TYPE REF TO flyweight
,uf TYPE REF TO unshared_concrete_flyweight
.
extrincicstate = 22.
CREATE OBJECT f.
fx = f->getflyweight( 'X' ).
SUBTRACT 1 FROM extrincicstate.
fx->operation( extrincicstate ).
SUBTRACT 1 FROM extrincicstate.
fy = f->getflyweight( 'Y' ).
fy->operation( extrincicstate ).
SUBTRACT 1 FROM extrincicstate.
fz = f->getflyweight( 'Z' ).
fz->operation( extrincicstate ).
SUBTRACT 1 FROM extrincicstate.
CREATE OBJECT uf.
uf->operation( extrincicstate ).
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
mainapp=>main( ).