# सिंगलटन पैटर्न — एडवांस्ड जावा

Source: https://www.geekswithgeeks.com/hi/advanced-java/adv-singleton-pattern

> सुनिश्चित करें कि किसी क्लास का ठीक एक ही इंस्टेंस हो और एक ही वैश्विक पहुँच बिंदु हो, enum से इसे सुरक्षित रूप से लागू करें, और जानें यह अक्सर क्यों अति-उपयोग होता है।

## एक इंस्टेंस, एक पहुँच बिंदु

**सिंगलटन** सुनिश्चित करता है कि किसी क्लास का ठीक एक ही इंस्टेंस हो और उस तक पहुँचने का एक वैश्विक बिंदु हो — साझा कॉन्फ़िग, कनेक्शन पूल या कैश के लिए उपयोगी। अति-उपयोग से ऐप छुपे हुए वैश्विक स्टेट का जाल बन जाता है जिसे टेस्ट करना कठिन होता है।

## सुरक्षित तरीक़ा: enum

एकल-तत्व `enum` सबसे सरल थ्रेड-सेफ़ सिंगलटन है — JVM ठीक एक ही इंस्टेंस बनाने की गारंटी देता है, और यह सीरियलाइज़ेशन-सेफ़ भी मुफ़्त में मिलता है।

```java
enum AppConfig {
    INSTANCE;
    private final Properties props = load();
    public String get(String key) { return props.getProperty(key); }
}

String url = AppConfig.INSTANCE.get("db.url");
```

## हाथ से बने सिंगलटन की बजाय DI प्राथमिकता दें

Spring ऐप में `@Bean` या `@Component` डिफ़ॉल्ट रूप से पहले से सिंगलटन है (कंटेनर में एक इंस्टेंस) — मैनुअल पैटर्न की ज़रूरत नहीं, और टेस्ट में बदलना आसान। हाथ से बना सिंगलटन केवल DI फ़्रेमवर्क से बाहर उपयोग करें।
