
INTERFACE zmke_if_henry_jekyll PUBLIC.
METHODS do_kind_things.
METHODS switch_personality RETURNING VALUE(result) TYPE REF TO zmke_if_edward_hyde.
ENDINTERFACE.
INTERFACE zmke_if_edward_hyde PUBLIC.
METHODS do_malicious_things.
METHODS switch_personality RETURNING VALUE(result) TYPE REF TO zmke_if_henry_jekyll.
ENDINTERFACE.
CLASS zmke_cl_henry_jekyll DEFINITION PUBLIC FINAL CREATE PRIVATE.
PUBLIC SECTION.
INTERFACES zmke_if_henry_jekyll.
INTERFACES zmke_if_edward_hyde.
CLASS-METHODS get_instance RETURNING VALUE(result) TYPE REF TO zmke_if_henry_jekyll.
PROTECTED SECTION.
PRIVATE SECTION.
CLASS-DATA instance TYPE REF TO zmke_cl_henry_jekyll.
ENDCLASS.
CLASS zmke_cl_henry_jekyll IMPLEMENTATION.
METHOD zmke_if_henry_jekyll~do_kind_things.
ENDMETHOD.
METHOD zmke_if_edward_hyde~do_malicious_things.
ENDMETHOD.
METHOD get_instance.
IF instance IS NOT BOUND.
instance = NEW #( ).
ENDIF.
result = instance.
ENDMETHOD.
METHOD zmke_if_henry_jekyll~switch_personality.
result = instance.
ENDMETHOD.
METHOD zmke_if_edward_hyde~switch_personality.
result = instance.
ENDMETHOD.
ENDCLASS.
CLASS zmke_cl_interface_example DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
PROTECTED SECTION.
PRIVATE SECTION.
METHODS test_no_personality_control IMPORTING out TYPE REF TO if_oo_adt_classrun_out.
METHODS test_with_personality_control IMPORTING out TYPE REF TO if_oo_adt_classrun_out.
ENDCLASS.
CLASS zmke_cl_interface_example IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
test_no_personality_control( out ).
test_with_personality_control( out ).
ENDMETHOD.
METHOD test_no_personality_control.
DATA henry_jekyll TYPE REF TO zmke_if_henry_jekyll.
DATA edward_hyde TYPE REF TO zmke_if_edward_hyde.
henry_jekyll = zmke_cl_henry_jekyll=>get_instance( ).
henry_jekyll->do_kind_things( ).
edward_hyde = henry_jekyll->switch_personality( ).
edward_hyde->do_malicious_things( ).
IF henry_jekyll = edward_hyde.
out->write( 'Dr. Henry Jekyll and Mr. Edward Hyde are the same person.' ).
ENDIF.
ENDMETHOD.
METHOD test_with_personality_control.
DATA henry_jekyll TYPE REF TO zmke_cl_henry_jekyll.
henry_jekyll ?= zmke_cl_henry_jekyll=>get_instance( ).
henry_jekyll->zmke_if_edward_hyde~do_malicious_things( ).
henry_jekyll->zmke_if_henry_jekyll~do_kind_things( ).
ENDMETHOD.
ENDCLASS.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
13 | |
5 | |
5 | |
4 | |
4 | |
3 | |
3 | |
3 | |
3 | |
3 |