{"id":7215,"date":"2025-08-01T00:58:18","date_gmt":"2025-07-31T19:28:18","guid":{"rendered":"https:\/\/www.sapewmhelp.com\/?question=what-is-singleton-class-how-to-use-singleton-class-in-sap-abap"},"modified":"2025-08-01T00:58:18","modified_gmt":"2025-07-31T19:28:18","slug":"what-is-singleton-class-how-to-use-singleton-class-in-sap-abap","status":"publish","type":"question","link":"https:\/\/www.sapewmhelp.com\/?question=what-is-singleton-class-how-to-use-singleton-class-in-sap-abap","title":{"rendered":"What is Singleton Class ? how to use Singleton class in SAP ABAP ?"},"content":{"rendered":"<p>A<span>\u00a0<\/span><strong>Singleton class<\/strong><span>\u00a0<\/span>is a design pattern that restricts the instantiation of a class to<span>\u00a0<\/span><strong>one single object<\/strong><span>\u00a0<\/span>throughout the lifecycle of a program. This is useful when exactly one object is needed to coordinate actions across the system \u2014 such as logging, configuration management, or connection handling.<\/p>\n<h3 data-start=\"346\" data-end=\"391\">Key Characteristics of Singleton Pattern:<\/h3>\n<ul>\n<li>Only one instance of the class exists.<\/li>\n<li>The class controls its own instantiation.<\/li>\n<li>A global access point is provided to access.<\/li>\n<\/ul>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code><!--StartFragment --><span><span>*&amp;---------------------------------------------------------------------*<\/span>\r\n<span>*&amp;\u00a0Report\u00a0\u00a0ZREP_LCLCLASS<\/span>\r\n<span>*&amp;<\/span>\r\n<span>*&amp;---------------------------------------------------------------------*<\/span>\r\n<span>*&amp;<\/span>\r\n<span>*&amp;<\/span>\r\n<span>*&amp;---------------------------------------------------------------------*<\/span>\r\n\r\n<span>REPORT\u00a0<\/span>zrep_lclclass<span>.<\/span>\r\n\r\n<span>CLASS\u00a0<\/span>lcl_class_singleton\u00a0<span>DEFINITION\u00a0<\/span><span>CREATE\u00a0<\/span><span>PRIVATE<\/span><span>.<\/span>\r\n\u00a0\u00a0<span>PUBLIC\u00a0<\/span><span>SECTION<\/span><span>.<\/span>\r\n\u00a0\u00a0<span>\"\u00a0to\u00a0check\u00a0the\u00a0instance\u00a0is\u00a0created\u00a0or\u00a0not.<\/span>\r\n\u00a0\u00a0\u00a0\u00a0<span>CLASS-METHODS<\/span><span>:\u00a0<\/span>m_factory\u00a0RETURNING\u00a0<span>VALUE<\/span><span>(<\/span>r_instance<span>)\u00a0<\/span><span>TYPE\u00a0<\/span><span>REF\u00a0<\/span><span>TO\u00a0<\/span>lcl_class_singleton<span>.<\/span>\r\n\u00a0\u00a0<span>\"\u00a0getter\u00a0and\u00a0setter\u00a0methods<\/span>\r\n\u00a0\u00a0\u00a0\u00a0<span>METHODS\u00a0<\/span><span>:\u00a0<\/span>get_attribute\u00a0RETURNING\u00a0<span>VALUE<\/span><span>(<\/span>r_attribute<span>)\u00a0<\/span><span>TYPE\u00a0<\/span><span>i<\/span><span>,<\/span>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0set_attribute\u00a0<span>IMPORTING\u00a0<\/span>m_attribute\u00a0<span>TYPE\u00a0<\/span><span>i<\/span><span>.<\/span>\r\n\r\n\u00a0\u00a0<span>PRIVATE\u00a0<\/span><span>SECTION<\/span><span>.<\/span>\r\n<span>*\u00a0\u00a0\u00a0\u00a0CLASS-DATA:\u00a0obj_instance\u00a0TYPE\u00a0REF\u00a0TO\u00a0lcl_class_singleton.<\/span>\r\n\u00a0\u00a0\u00a0\u00a0<span>DATA\u00a0<\/span>gv_attribute\u00a0<span>TYPE\u00a0<\/span><span>i<\/span><span>.<\/span>\r\n<span>ENDCLASS<\/span><span>.<\/span>\r\n\r\n<span>class\u00a0<\/span>lcl_class_singleton\u00a0<span>IMPLEMENTATION<\/span><span>.<\/span>\r\n\u00a0\u00a0\u00a0\u00a0<span>method\u00a0<\/span>m_factory<span>.<\/span>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span>if\u00a0<\/span>r_instance\u00a0<span>is\u00a0<\/span><span>not\u00a0<\/span><span>BOUND<\/span><span>.<\/span>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0r_instance\u00a0<span>=\u00a0<\/span><span>new\u00a0<\/span>lcl_class_singleton<span>(\u00a0<\/span><span>)<\/span><span>.<\/span>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span>endif<\/span><span>.<\/span>\r\n\u00a0\u00a0\u00a0<span>ENDMETHOD<\/span><span>.<\/span>\r\n\r\n\u00a0\u00a0\u00a0<span>method\u00a0<\/span>get_attribute<span>.<\/span>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0r_Attribute\u00a0<span>=\u00a0<\/span>gv_Attribute<span>.<\/span>\r\n\u00a0\u00a0\u00a0<span>ENDMETHOD<\/span><span>.<\/span>\r\n\r\n\u00a0\u00a0\u00a0<span>method\u00a0<\/span>set_attribute<span>.<\/span>\r\n\u00a0\u00a0\u00a0\u00a0\u00a0gv_Attribute\u00a0<span>=\u00a0\u00a0<\/span>m_attribute<span>.<\/span>\r\n\u00a0\u00a0\u00a0<span>ENDMETHOD<\/span><span>.<\/span>\r\n\u00a0<span>ENDCLASS<\/span><span>.<\/span>\r\n\r\n\u00a0<span>START-OF-SELECTION<\/span><span>.<\/span>\r\n\u00a0<span>\"\u00a0create\u00a0an\u00a0instance\u00a0of\u00a0class<\/span>\r\n\u00a0\u00a0\u00a0<span>data<\/span><span>(<\/span>lo_obj<span>)\u00a0<\/span><span>=\u00a0\u00a0<\/span>lcl_class_singleton<span>=&gt;<\/span>m_factory<span>(\u00a0<\/span><span>)<\/span><span>.<\/span>\r\n\u00a0<span>\"\u00a0set\u00a0the\u00a0value\u00a0for\u00a0the\u00a0attribute.<\/span>\r\n\u00a0\u00a0\u00a0lo_obj<span>-&gt;<\/span>set_attribute<span>(\u00a0<\/span><span>10\u00a0<\/span><span>)<\/span><span>.<\/span>\r\n\r\n\u00a0\u00a0\u00a0<span>\"\u00a0try\u00a0to\u00a0create\u00a0another\u00a0instace\u00a0of\u00a0the\u00a0class.<\/span>\r\n\u00a0\u00a0\u00a0\u00a0<span>data<\/span><span>(<\/span>lo_obj2<span>)\u00a0<\/span><span>=\u00a0<\/span>lcl_class_singleton<span>=&gt;<\/span>m_factory<span>(\u00a0<\/span><span>)<\/span><span>.<\/span>\r\n\u00a0\u00a0\u00a0<span>\"\u00a0check\u00a0the\u00a0attribute\u00a0of\u00a0the\u00a0new\u00a0instance<\/span>\r\n\u00a0\u00a0\u00a0<span>\"\u00a0it\u00a0should\u00a0be\u00a0same\u00a0as\u00a0go_obj\u00a0as\u00a0it\u00a0contains\u00a0a\u00a0static\u00a0attribute<\/span>\r\n\u00a0\u00a0\u00a0<span>\"\u00a0get\u00a0the\u00a0data\u00a0and\u00a0print\u00a0it.<\/span>\r\n\u00a0\u00a0\u00a0<span>write<\/span><span>:\u00a0<\/span>'First\u00a0object\u00a0attribute\u00a0<span>value\u00a0<\/span>'<span>,\u00a0<\/span>lo_obj<span>-&gt;<\/span>get_attribute<span>(\u00a0<\/span><span>)<\/span><span>.<\/span>\r\n\u00a0\u00a0\u00a0<span>write\u00a0<\/span><span>:<\/span>\/\u00a0'Second\u00a0object\u00a0attribute\u00a0<span>value\u00a0<\/span>'<span>,\u00a0<\/span>lo_obj2<span>-&gt;<\/span>get_attribute<span>(\u00a0<\/span><span>)<\/span><span>.<\/span><\/span> \r\n<\/code><\/pre>\n<p>Output:<br \/>\n<img decoding=\"async\" class=\"content-img\" src=\"https:\/\/www.sapewmhelp.com\/wp-content\/uploads\/2025\/08\/SIngleton-class-2.png\" \/><\/p>\n<\/div>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","question-category":[174],"question_tags":[178,171,195,168,177,211],"class_list":["post-7215","question","type-question","status-publish","hentry","question-category-ooabap","question_tags-abap","question_tags-class","question_tags-object","question_tags-ooabap","question_tags-sap","question_tags-singleton-class"],"_links":{"self":[{"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=\/wp\/v2\/question\/7215","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=\/wp\/v2\/question"}],"about":[{"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=\/wp\/v2\/types\/question"}],"author":[{"embeddable":true,"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7215"}],"wp:attachment":[{"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7215"}],"wp:term":[{"taxonomy":"question-category","embeddable":true,"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=%2Fwp%2Fv2%2Fquestion-category&post=7215"},{"taxonomy":"question_tags","embeddable":true,"href":"https:\/\/www.sapewmhelp.com\/index.php?rest_route=%2Fwp%2Fv2%2Fquestion_tags&post=7215"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}