{"id":31367,"date":"2023-10-20T11:44:21","date_gmt":"2023-10-20T10:44:21","guid":{"rendered":"https:\/\/www.baeldung.com\/java-patterns-singleton-cons"},"modified":"2023-10-20T11:44:21","modified_gmt":"2023-10-20T10:44:21","slug":"drawbacks-of-the-singleton-design-pattern","status":"publish","type":"post","link":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/2023\/10\/20\/drawbacks-of-the-singleton-design-pattern\/","title":{"rendered":"Drawbacks of the Singleton Design Pattern"},"content":{"rendered":"<p><img src=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Java-8-Featured-1024x536.png\" class=\"webfeedsFeaturedVisual wp-post-image\" alt=\"\" decoding=\"async\" style=\"float: left; margin-right: 5px;\" loading=\"lazy\" srcset=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Java-8-Featured-1024x536.png 1024w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Java-8-Featured-300x157.png 300w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Java-8-Featured-768x402.png 768w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Java-8-Featured-100x52.png 100w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Java-8-Featured.png 1200w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/><\/p>\n<h2 id=\"bd-overview\" data-id=\"overview\">1. Overview<\/h2>\n<div class=\"bd-anchor\" id=\"overview\"><\/div>\n<p>Singleton is one of the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/creational-design-patterns\"  rel=\"noopener\">creational design patterns<\/a>\u00a0published by the Gang of Four in 1994.<\/p>\n<p>Because of its simple implementation, we tend to overuse it. Therefore, nowadays, it\u2019s considered to be an anti-pattern. Before introducing it in our code, we should ask ourselves if we really need the functionality it provides.<\/p>\n<p>In this tutorial, we\u2019ll discuss the general drawbacks of the\u00a0<a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-singleton\"  rel=\"noopener\">Singleton<\/a> design pattern and see some alternatives we can use instead.<\/p>\n<h2 id=\"bd-code-example\" data-id=\"code-example\">2. Code Example<\/h2>\n<div class=\"bd-anchor\" id=\"code-example\"><\/div>\n<p>First, let&#8217;s create a class we&#8217;ll use in our examples:<\/p>\n<pre><code class=\"language-java\">public class Logger {\r\n    private static Logger instance;\r\n    private PrintWriter fileWriter;\r\n    public static Logger getInstance() {\r\n        if (instance == null) {\r\n            instance = new Logger();\r\n        }\r\n        return instance;\r\n    }\r\n    private Logger() {\r\n        try {\r\n            fileWriter = new PrintWriter(new FileWriter(&quot;app.log&quot;, true));\r\n        } catch (IOException e) {\r\n            e.printStackTrace();\r\n        }\r\n    }\r\n    public void log(String message) {\r\n        String log = String.format(&quot;[%s]- %s&quot;, LocalDateTime.now(), message);\r\n        fileWriter.println(log);\r\n        fileWriter.flush();\r\n    }\r\n}<\/code><\/pre>\n<p>The class above represents a simplified class for logging into the file. We implemented it as a singleton, using the lazy initialization approach.<\/p>\n<h2 id=\"bd-disadvantages-of-singleton\" data-id=\"disadvantages-of-singleton\">3. Disadvantages of Singleton<\/h2>\n<div class=\"bd-anchor\" id=\"disadvantages-of-singleton\"><\/div>\n<p>By definition, the Singleton pattern ensures a class has only one instance and, additionally, provides global access to this instance. Therefore, we should use it in cases where we need both of those things.<\/p>\n<p><strong>Looking at its definition, we can notice it violates the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-single-responsibility-principle\"  rel=\"noopener\">Single Responsibility Principle<\/a>.<\/strong> The principle states one class should have only one responsibility.<\/p>\n<p>However, the Singleton pattern has at least two responsibilities &#8211; it ensures the class has only one instance and contains business logic.<\/p>\n<p>In the next sections, we\u2019ll discuss some other pitfalls of this design pattern.<\/p>\n<h3 id=\"bd-1-global-state\" data-id=\"1-global-state\">3.1. Global State<\/h3>\n<div class=\"bd-anchor\" id=\"1-global-state\"><\/div>\n<p>We know <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/cs\/global-variables\"  rel=\"noopener\">global states<\/a> are considered to be a bad practice and, thus, should be avoided.<\/p>\n<p>Although it may not be obvious, a singleton introduces global variables in our code, but they\u2019re encapsulated within a class.<\/p>\n<p><strong>Since they&#8217;re global, everyone can access and use them. Moreover, if they aren\u2019t immutable, everyone can change them as well.<\/strong><\/p>\n<p>Suppose we use the <em>Logger<\/em> class in several places in our code. Everyone can access and modify its values.<\/p>\n<p>Now, if we encounter a problem in one method that uses it and discover the problem is in the singleton itself, we need to check the entire codebase and every method that uses it to find the impact of the problem.<\/p>\n<p>This can quickly become a bottleneck for our application.<\/p>\n<h3 id=\"bd-2-code-flexibility\" data-id=\"2-code-flexibility\">3.2. Code Flexibility<\/h3>\n<div class=\"bd-anchor\" id=\"2-code-flexibility\"><\/div>\n<p>Next, in terms of software development, the only certainty lies in the fact our code will likely change in the future.<\/p>\n<p>When a project is in the early stages of development, we can make the assumption there will be no more than one instance of certain classes and define them using the Singleton design pattern.<\/p>\n<p><strong>However, if requirements change and our assumption turns out to be incorrect, we\u2019d need to put a big effort into refactoring our code.<\/strong><\/p>\n<p>Let\u2019s discuss the problem above in our working example.<\/p>\n<p>We assumed we\u2019d only need one instance of our <em>Logger<\/em> class. What if, in the future, we decide one file isn&#8217;t enough?<\/p>\n<p>For instance, we might need separate files for errors and info messages. Additionally, one instance of a class wouldn&#8217;t be enough anymore. Next, in order to make the modification possible, we\u2019d need to refactor our entire codebase and remove the singleton, which would require a lot of effort.<\/p>\n<p><strong>With singletons, we\u2019re making our code tightly coupled and less flexible.<\/strong><\/p>\n<h3 id=\"bd-3-dependency-hiding\" data-id=\"3-dependency-hiding\">3.3. Dependency Hiding<\/h3>\n<div class=\"bd-anchor\" id=\"3-dependency-hiding\"><\/div>\n<p>Moving forward, singleton promotes hidden dependencies.<\/p>\n<p><strong>To put it differently, when we\u2019re using them in other classes, we\u2019re hiding the fact these classes depend on a singleton instance.<\/strong><\/p>\n<p>Let&#8217;s consider the <em>sum()<\/em> method:<\/p>\n<pre><code class=\"language-java\">public static int sum(int a, int b){\r\n    Logger logger = Logger.getInstance();\r\n    logger.log(&quot;A simple message&quot;);\r\n    return a + b;\r\n}<\/code><\/pre>\n<p>If we don&#8217;t look directly at the implementation of the <em>sum()<\/em> method, we have no way of knowing it uses the <em>Logger<\/em> class.<\/p>\n<p>We didn\u2019t pass the dependencies as usual, as arguments to the constructor or a method.<\/p>\n<h3 id=\"bd-4-multithreading\" data-id=\"4-multithreading\">3.4. Multithreading<\/h3>\n<div class=\"bd-anchor\" id=\"4-multithreading\"><\/div>\n<p>Next, in a multithreaded environment, singletons can be tricky to implement.<\/p>\n<p><strong>The main problem is that the global variables are visible to all threads in our code.<\/strong> Moreover, each thread is unaware of the activities other threads make on the same instance.<\/p>\n<p>Therefore, we can end up facing different problems, such as <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/cs\/race-conditions\"  rel=\"noopener\">race conditions<\/a> and other synchronization issues.<\/p>\n<p>Our earlier implementation of the <em>Logger<\/em> class won\u2019t work well in a multithreaded environment. Nothing in our method prevents multiple threads from accessing the <em>getInstance()<\/em> method at the same time. As a result, we can end up having more than one instance of the <em>Logger<\/em> class.<\/p>\n<p>Let\u2019s modify the <em>getInstance()<\/em> method with the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-synchronized\"  rel=\"noopener\"><em>synchronized<\/em><\/a> keyword:<\/p>\n<pre><code class=\"language-java\">public static Logger getInstance() {\r\n    synchronized (Logger.class) {\r\n        if (instance == null) {\r\n            instance = new Logger();\r\n        }\r\n    }\r\n    return instance;\r\n}<\/code><\/pre>\n<p>We\u2019re now forcing every thread to wait its turn. However, we should be aware having synchronization is expensive. In addition, we are introducing an overhead to our method.<\/p>\n<p>If necessary, one of the ways we can solve our problem is by applying the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-singleton-double-checked-locking\"  rel=\"noopener\">double-checking locking<\/a> mechanism:<\/p>\n<pre><code class=\"language-java\">private static volatile Logger instance;\r\npublic static Logger getInstance() {\r\n    if (instance == null) {\r\n        synchronized (Logger.class) {\r\n            if (instance == null) {\r\n                instance = new Logger();\r\n            }\r\n        }\r\n    }\r\n    return instance;\r\n}<\/code><\/pre>\n<p><strong>However, we should keep in mind the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/jvm-vs-jre-vs-jdk#jvm\">JVM<\/a> allows access to partially constructed objects, which may lead to unexpected behaviors of our program<\/strong>. Therefore, it&#8217;s required to add the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-volatile\"  rel=\"noopener\"><em>volatile<\/em><\/a> keyword to the <em>instance<\/em> variable.<\/p>\n<p>Other alternatives we might consider include:<\/p>\n<ul>\n<li>an eagerly created instance rather than a lazy one<\/li>\n<li>an <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/a-guide-to-java-enums\">Enum<\/a> Singleton<\/li>\n<li>the Bill Pugh Singleton<\/li>\n<\/ul>\n<h3 id=\"bd-5-testing\" data-id=\"5-testing\">3.5. Testing<\/h3>\n<div class=\"bd-anchor\" id=\"5-testing\"><\/div>\n<p>Going further, we can notice the downsides of a singleton when it comes to testing our code.<\/p>\n<p><strong>Unit tests should test only a small portion of our code and shouldn\u2019t depend on the other services that could fail, causing our test to fail as well.<\/strong><\/p>\n<p>Let&#8217;s test our <em>sum()<\/em> method:<\/p>\n<pre><code class=\"language-java\">@Test\r\nvoid givenTwoValues_whenSum_thenReturnCorrectResult() {\r\n    SingletonDemo singletonDemo = new SingletonDemo();\r\n    int result = singletonDemo.sum(12, 4);\r\n    assertEquals(16, result);\r\n}<\/code><\/pre>\n<p>Even though our test passes, it creates a file with logs since the <em>sum()<\/em> method uses the <em>Logger<\/em> class.<\/p>\n<p>If something were wrong with our <em>Logger<\/em> class, our test would fail. Now, how should we prevent logging from happening?<\/p>\n<p>If applicable, one solution would be to mock the static <em>getInstance()<\/em> method using\u00a0<a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-mockito-singleton\"  rel=\"noopener\">Mockito<\/a>:<\/p>\n<pre><code class=\"language-java\">@Test\r\nvoid givenMockedLogger_whenSum_thenReturnCorrectResult() {\r\n    Logger logger = mock(Logger.class);\r\n    try (MockedStatic&lt;Logger&gt; loggerMockedStatic = mockStatic(Logger.class)) {\r\n        loggerMockedStatic.when(Logger::getInstance).thenReturn(logger);\r\n        doNothing().when(logger).log(any());\r\n        SingletonDemo singletonDemo = new SingletonDemo();\r\n        int result = singletonDemo.sum(12, 4);\r\n        Assertions.assertEquals(16, result);\r\n    }\r\n}<\/code><\/pre>\n<h2 id=\"bd-alternatives-to-singleton\" data-id=\"alternatives-to-singleton\">4. Alternatives to Singleton<\/h2>\n<div class=\"bd-anchor\" id=\"alternatives-to-singleton\"><\/div>\n<p>Finally, let\u2019s discuss some alternatives.<\/p>\n<p>In cases where we need only one instance, <strong>we could use dependency injection.<\/strong> <strong>In other words, we can create only one instance and pass it as an argument where it&#8217;s needed.<\/strong> This way, we\u2019d raise the awareness of dependencies a method or another class needs in order to function properly.<\/p>\n<p>Additionally, if we need multiple instances in the future, we\u2019d change our code more easily.<\/p>\n<p>Moreover, we can use the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-factory-pattern\"  rel=\"noopener\">Factory pattern<\/a> for long-living objects.<\/p>\n<h2 id=\"bd-conclusion\" data-id=\"conclusion\">5. Conclusion<\/h2>\n<div class=\"bd-anchor\" id=\"conclusion\"><\/div>\n<p>In this article, we looked at the main drawbacks of the Singleton design pattern.<\/p>\n<p>To sum up, we should use this pattern only when we really need it. Overusing it introduces unnecessary restrictions\u00a0in cases where we don&#8217;t actually need a single instance. As an alternative, we can simply use dependency injection and pass the object as an argument.<\/p>\n<p>As always, the code of all examples is\u00a0available <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/github.com\/eugenp\/tutorials\/tree\/master\/patterns-modules\/design-patterns-creational-2\"  rel=\"noopener\">over on GitHub<\/a>.<\/p>\n<p><Img align=\"left\" border=\"0\" height=\"1\" width=\"1\" alt=\"\" style=\"border:0;float:left;margin:0;padding:0;width:1px!important;height:1px!important;\" hspace=\"0\" src=\"https:\/\/feeds.feedblitz.com\/~\/i\/802555112\/0\/baeldung\"><\/p>\n<div style=\"clear:both;padding-top:0.2em;\"><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/802555112\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/802555112\/baeldung,https%3A%2F%2Fwww.baeldung.com%2Fwp-content%2Fuploads%2F2021%2F09%2FJava-8-Featured-1024x536.png\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/802555112\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/802555112\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/802555112\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/java-patterns-singleton-cons#respond\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>&#160;<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/java-patterns-singleton-cons\/feed\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>&#160;<\/div>\n\n<h2><b>Commercials Cooperation Advertisements:<\/b><\/h2>\r\n<p><br>(1) IT Teacher IT Freelance<br> <\/p>\r\n<a href=https:\/\/itteacheritfreelance.hk\/wordpress><img src=http:\/\/gamefootballmobileanimeiphone.com\/wp-content\/uploads\/2023\/09\/ITTeacherITFreelance-Website.png alt=IT\u96fb\u8166\u88dc\u7fd2 java\u88dc\u7fd2 \u70ba\u5927\u5bb6\u914d\u5c0d\u96fb\u8166\u88dc\u7fd2,IT freelance, \u79c1\u4eba\u8001\u5e2b, PHP\u88dc\u7fd2,CSS\u88dc\u7fd2,XML,Java\u88dc\u7fd2,MySQL\u88dc\u7fd2,graphic design\u88dc\u7fd2,\u4e2d\u5c0f\u5b78ICT\u88dc\u7fd2,\u4e00\u5c0d\u4e00\u79c1\u4eba\u88dc\u7fd2\u548cFreelance\u81ea\u7531\u5de5\u4f5c\u914d\u5c0d\u3002\/><\/a><p><a href=https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/findteacher>\u7acb\u523b\u8a3b\u518a\u53ca\u5831\u540d\u96fb\u8166\u88dc\u7fd2\u8ab2\u7a0b\u5427! <\/a><br>\r\n\r\n\u7535\u5b50\u8ba1\u7b97\u673a -\u6559\u80b2 -IT \u96fb\u8166\u73ed\u201d ( IT\u96fb\u8166\u88dc\u7fd2 ) \u63d0\u4f9b\u4e00\u500b\u65b9\u4fbf\u7684\u7535\u5b50\u8ba1\u7b97\u673a \u6559\u80b2\u5e73\u53f0, \u70ba\u5927\u5bb6\u914d\u5c0d\u4fe1\u606f\u6280\u672f, \u96fb\u8166 \u8001\u5e2b, IT freelance \u548c programming expert. \u8b93\u5927\u5bb6\u65b9\u4fbf\u5730\u5c31\u80fd\u627e\u5230\u5408\u9069\u7684\u96fb\u8166\u88dc\u7fd2, \u96fb\u8166\u73ed, \u5bb6\u6559, \u79c1\u4eba\u8001\u5e2b.  <br>\r\n\r\nWe are a education and information platform which you can find a IT private tutorial teacher or freelance. <br>\r\n\r\nAlso we provide different information about information technology, Computer, programming, mobile, Android, apple, game, movie, anime, animation\u2026 \r\n<\/p>\n<p><br>(2) ITSec<br> <\/p><a href=https:\/\/itsec.vip><img src=http:\/\/gamefootballmobileanimeiphone.com\/wp-content\/uploads\/2023\/09\/ITSec-Main-Promotion-Image.png alt= https:\/\/itsec.vip\/\r\nSecure Your Computers from Cyber Threats and mitigate risks with professional services to defend Hackers.  \r\nITSec provide IT Security and Compliance Services, including IT Compliance Services, Risk Assessment, IT Audit, Security Assessment and Audit, ISO 27001 Consulting and Certification, GDPR Compliance Services, Privacy Impact Assessment (PIA), Penetration test, Ethical Hacking, Vulnerabilities scan, IT Consulting, Data Privacy Consulting, Data Protection Services, Information Security Consulting, Cyber Security Consulting, Network Security Audit, Security Awareness Training.\/><\/a> \r\n<br><br> \r\n<p><a href=https:\/\/itsec.vip>www.ITSec.vip<\/a> <br> <br> \r\n<p><a href=https:\/\/sraa.com.hk>www.Sraa.com.hk<\/a> <br> <br> \r\n<p><a href=https:\/\/itsec.hk>www.ITSec.hk<\/a> <br> <br> \r\n<p><a href=https:\/\/penetrationtest.hk>www.Penetrationtest.hk<\/a> <br> <br> \r\n<p><a href=https:\/\/itseceu.uk>www.ITSeceu.uk<\/a> <br> <br> \r\nSecure Your Computers from Cyber Threats and mitigate risks with professional services to defend Hackers. <br><br>\r\nITSec provide IT Security and Compliance Services, including IT Compliance Services, Risk Assessment, IT Audit, Security Assessment and Audit, ISO 27001 Consulting and Certification, GDPR Compliance Services, Privacy Impact Assessment (PIA), Penetration test, Ethical Hacking, Vulnerabilities scan, IT Consulting, Data Privacy Consulting, Data Protection Services, Information Security Consulting, Cyber Security Consulting, Network Security Audit, Security Awareness Training. \r\n<br><br>Contact us right away. <br><br>Email (Prefer using email to contact us): <br>SalesExecutive@ITSec.vip<\/p>","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/09\/Java-8-Featured-1024x536.png\" class=\"webfeedsFeaturedVisual wp-post-image\" alt=\"\" loading=\"lazy\"><\/p>\n<p>Learn the general drawbacks of the\u00a0Singleton design pattern and check out some alternatives.<\/p>\n<div><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/802555112\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\"><\/a>\u00a0<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/802555112\/baeldung,https%3A%2F%2Fwww.baeldung.com%2Fwp-content%2Fuploads%2F2021%2F09%2FJava-8-Featured-1024x536.png\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\"><\/a>\u00a0<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/802555112\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\"><\/a>\u00a0<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/802555112\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\"><\/a>\u00a0<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/802555112\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\"><\/a>\u00a0<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/java-patterns-singleton-cons#respond\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>\u00a0<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/java-patterns-singleton-cons\/feed\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>\u00a0<\/div>\n","protected":false},"author":1194,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[22],"tags":[61,122,127,129,124,128,125,132,131,133,126,130,123,66,94,88,97,56,64,65,60,112,40,75,95,104,33,120,105,101,98,115,30,29,41,86,70,69,68,72,71,26,118,108,87,46,55,48,52,54,51,50,83,62,58,57,109,35,59,63,85,79,82,96,80,27,81,114,44,42,43,45,38,39,110,117,100,111,116,73,89,90,92,91,93,84,78,37,102,34,36,77,67,74,99,113,119,28,121,32,47,49,53,103,31,76],"class_list":["post-31367","post","type-post","status-publish","format-standard","hentry","category-mobile","tag-airpods","tag-anime","tag-anime-characters","tag-anime-cosplay","tag-anime-edits","tag-anime-merchandise","tag-anime-movies","tag-anime-news","tag-anime-recommendations","tag-anime-reviews","tag-anime-series","tag-anime-streaming","tag-animes","tag-app-store","tag-app-store-samsung","tag-appgallery","tag-appgallery-oneplus","tag-apple","tag-apple-music","tag-apple-tv","tag-apple-watch","tag-bbc-sport","tag-best-mobile-games","tag-bixby","tag-bixby-xiaomi","tag-champions-league","tag-cyberpunk","tag-cyberpunk-2077","tag-fantasy-football","tag-fifa","tag-football","tag-formula-1","tag-fortnite","tag-free-fire","tag-free-mobile-games","tag-freebuds-pro","tag-galaxy-a52","tag-galaxy-note-20","tag-galaxy-s21","tag-galaxy-watch-4","tag-galaxy-z-fold-3","tag-game","tag-games","tag-golf","tag-harmonyos","tag-how-to-backup-iphone","tag-how-to-factory-reset-iphone","tag-how-to-reset-iphone","tag-how-to-restore-iphone","tag-how-to-unlock-iphone","tag-how-to-unlock-iphone-5","tag-how-to-unlock-iphone-6","tag-huawei","tag-ios","tag-ipad","tag-iphone","tag-live-soccer","tag-lol","tag-macbook","tag-macos","tag-mate-40-pro","tag-mi-11-lite","tag-mi-home-security-camera-basic-1080p","tag-mi-home-security-camera-basic-1080p-huawei","tag-mi-smart-band-6","tag-minecraft","tag-miui","tag-mlb-scores","tag-mobile-game-design","tag-mobile-game-development","tag-mobile-game-marketing","tag-mobile-game-monetization","tag-mobile-games","tag-mobile-gaming","tag-nba-scores","tag-nba-standings","tag-nfl","tag-nfl-scores","tag-nhl-scores","tag-one-ui","tag-oneplus","tag-oneplus-9-pro","tag-oneplus-buds-pro","tag-oneplus-nord-ce-5g","tag-oxygenos","tag-p40-pro-plus","tag-poco-x3-pro","tag-pokemon","tag-premier-league","tag-pubg","tag-pubg-mobile","tag-redmi-note-10-pro","tag-samsung","tag-samsung-pay","tag-soccer","tag-sports","tag-steam","tag-steeam","tag-top-10-anime","tag-valorant","tag-when-do-the-iphone-7-come-out","tag-when-does-the-iphone-7-come-out","tag-when-is-the-iphone-7-coming-out","tag-world-cup","tag-xbox-series-x","tag-xiaomi"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts\/31367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/users\/1194"}],"replies":[{"embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/comments?post=31367"}],"version-history":[{"count":1,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts\/31367\/revisions"}],"predecessor-version":[{"id":31368,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts\/31367\/revisions\/31368"}],"wp:attachment":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/media?parent=31367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/categories?post=31367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/tags?post=31367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}