forked from moreus/ABAPDesignPattern
-
Notifications
You must be signed in to change notification settings - Fork 0
/
zdp_mediator.abap
136 lines (112 loc) · 3.23 KB
/
zdp_mediator.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
134
135
136
*&---------------------------------------------------------------------*
*& Report ZDP_MEDIATOR
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zdp_mediator.
CLASS united_nations DEFINITION DEFERRED.
CLASS country DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS:
constructor IMPORTING io_mediator TYPE REF TO united_nations.
PROTECTED SECTION.
DATA: mo_mediator TYPE REF TO united_nations.
ENDCLASS.
CLASS country IMPLEMENTATION.
METHOD constructor.
me->mo_mediator = io_mediator.
ENDMETHOD.
ENDCLASS.
CLASS united_nations DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS:
declear ABSTRACT IMPORTING iv_message TYPE string
io_colleague TYPE REF TO country.
ENDCLASS.
CLASS irag DEFINITION INHERITING FROM country.
PUBLIC SECTION.
METHODS:
constructor IMPORTING io_mediator TYPE REF TO united_nations
,declear IMPORTING iv_message TYPE string
,get_message IMPORTING iv_message TYPE string
.
ENDCLASS.
CLASS irag IMPLEMENTATION.
METHOD constructor.
super->constructor( io_mediator ).
ENDMETHOD.
METHOD declear.
me->mo_mediator->declear( iv_message = iv_message io_colleague =
me ).
ENDMETHOD.
METHOD get_message.
WRITE: / '伊拉克获得对方信息: ', iv_message.
ENDMETHOD.
ENDCLASS.
CLASS usa DEFINITION INHERITING FROM country.
PUBLIC SECTION.
METHODS:
constructor IMPORTING io_mediator TYPE REF TO united_nations
,declear IMPORTING iv_message TYPE string
,get_message IMPORTING iv_message TYPE string
.
ENDCLASS.
CLASS usa IMPLEMENTATION.
METHOD constructor.
super->constructor( io_mediator ).
ENDMETHOD.
METHOD declear.
me->mo_mediator->declear( iv_message = iv_message io_colleague = me ).
ENDMETHOD.
METHOD get_message.
WRITE: / '美国获得对方信息: ', iv_message.
ENDMETHOD.
ENDCLASS.
CLASS united_nations_securitycouncil DEFINITION INHERITING FROM united_nations.
PUBLIC SECTION.
METHODS:
set_colleague1 IMPORTING io_co1 TYPE REF TO usa,
set_colleague2 IMPORTING io_co2 TYPE REF TO irag,
declear REDEFINITION.
PRIVATE SECTION.
DATA: mo_co1 TYPE REF TO usa,
mo_co2 TYPE REF TO irag.
ENDCLASS.
CLASS united_nations_securitycouncil IMPLEMENTATION.
METHOD set_colleague1.
me->mo_co1 = io_co1.
ENDMETHOD.
METHOD set_colleague2.
me->mo_co2 = io_co2.
ENDMETHOD.
METHOD declear.
IF io_colleague EQ mo_co1.
mo_co2->get_message( iv_message ).
ELSE.
mo_co1->get_message( iv_message ).
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS mainapp DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
main.
ENDCLASS.
CLASS mainapp IMPLEMENTATION.
METHOD main.
DATA: unsc TYPE REF TO united_nations_securitycouncil,
c1 TYPE REF TO usa
, c2 TYPE REF TO irag.
CREATE OBJECT unsc.
c1 = NEW usa( unsc ).
c2 = NEW irag( unsc ).
unsc->set_colleague2( c2 ).
unsc->set_colleague1( c1 ).
c1->declear( '不准研制核武器,否则就要发动战争' ).
c2->declear( '我们没有核武器,也不怕侵略' ).
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
mainapp=>main( ).