जोश ब्लॉक के प्रभावी जावा (सिंगलटन प्रॉपर्टी को एक निजी कंस्ट्रक्टर या एन्युमेरेटर के साथ लागू करें) का उल्लेख है कि "हालांकि इस दृष्टिकोण को व्यापक रूप से अपनाया जाना बाकी है, लेकिन एक एकल तत्व enum प्रकार को लागू करने का सबसे अच्छा तरीका है सिंगलटन। "सिंगल-एलीमेंट एनम टाइप सिंगलटन वास्तव में व्यापक रूप से एक व्यापक रूप से अपनाया गया विचार है?
उदाहरण:
public enum Elvis {
INSTANCE;
private final String[] favoriteSongs =
{ "Hound Dog", "Heartbreak Hotel" };
public void printFavorites() {
System.out.println(Arrays.toString(favoriteSongs));
}
}
आगे कहा: "यह दृष्टिकोण कार्यात्मक सार्वजनिक क्षेत्र दृष्टिकोण के बराबर है, सिवाय इसके कि यह अधिक संक्षिप्त है कि, मुक्त करने के लिए क्रमबद्धता मशीनरी प्रदान करता है, और कई इन्स्टेन्शियशन के खिलाफ एक कवचयुक्त गारंटी प्रदान करता है, यहां तक कि परिष्कृत क्रमिकरण या प्रतिबिंब हमलों के चेहरे में भी। "
सबसे बड़ा नकारात्मक मैं देखता हूं: क्या म्यूट नहीं है जो म्यूटेबल राज्य होना चाहिए? राज्य के साथ सिंगलटन का उपयोग करना आम बात है।
तो क्या यह पैटर्न वास्तव में प्रकाशन तिथि (द्वितीय संस्करण प्रकाशित 2008) से अधिक आम हो गया है?
क्या मैं अकेला व्यक्ति हूं जो जावा में कैसे enums कक्षाओं के व्यवहार के साथ असहज है? ऐसा लगता है कि जावा ने "प्राकृतिक दिखने वाले प्रकारों" को दूर करने का निर्णय लिया है जो आप सी ++ में ओवरलोडिंग विधियों से कर सकते हैं, और इस अजीब ब्लॉब में सीधे enums बदल दिया। – Uri
सी ++ स्विचिंग के लिए इंक के उपयोग के विस्तार के रूप में enums दृष्टिकोण, इसलिए वे बहुत ही सरल संरचनाएं हैं। दूसरी तरफ, जावा में, enums को वैध वर्ग के रूप में माना जाता है, जिसमें सभी कार्यक्षमताएं होती हैं, जो तत्कालता पर उनके एक (प्रमुख) प्रतिबंध में भिन्न होती हैं। उनके पास वही नाम है क्योंकि उनके उपयोग कुछ महत्वपूर्ण क्षेत्रों में ओवरलैप होते हैं, लेकिन उन्हें बहुत बारीकी से तुलना करने से सावधान रहें - वे बहुत अलग जानवर हैं। – tlayton
@ यूरी, जावा में enum's केवल वर्गों की तरह व्यवहार नहीं करते हैं, वे _are_ कक्षाएं। वे सभी स्पष्ट रूप से 'java.lang.Enum 'का विस्तार करते हैं। – Pops