* Singleton-Klasse, kann durch den Zusatz CREATE PRIVATE nur sich selbst instanziieren
* stellt einen Spezialfall einer Factory-Klasse dar
CLASS lcl_singleton DEFINITION CREATE PRIVATE.
PUBLIC SECTION.
* Statischer Konstruktor, wird nur einmal aufgerufen
* erzeugt genau eine Referenz auf Singleton-Objekt
CLASS-METHODS:
class_constructor.
* Factory-Methode -> Gibt immer die gleiche Referenz auf Singleton-Objekt zurück
CLASS-METHODS:
get_instance RETURNING VALUE(ret_singleton) TYPE REF TO lcl_singleton.
* Testmethode, gibt eine GUID zurück
METHODS:
get_guid RETURNING VALUE(ret_guid) TYPE sysuuid_c32.
PRIVATE SECTION.
* Referenz auf Singleton-Objekt
CLASS-DATA: o_singleton TYPE REF TO lcl_singleton.
ENDCLASS.
CLASS lcl_singleton IMPLEMENTATION.
* Statischer Konstruktor, wird nur einmal aufgerufen
* erzeugt genau eine Referenz auf Singleton-Objekt
METHOD class_constructor.
o_singleton = NEW #( ).
ENDMETHOD.
* Factory-Methode -> Gibt immer die gleiche Referenz auf Singleton-Objekt zurück
METHOD get_instance.
ret_singleton = o_singleton.
ENDMETHOD.
* Testmethode, gibt eine GUID zurück
METHOD get_guid.
TRY.
ret_guid = cl_system_uuid=>create_uuid_c32_static( ).
CATCH cx_root.
ENDTRY.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA(o_ref) = lcl_singleton=>get_instance( ).
WRITE: / |{ o_ref->get_guid( ) }|.