2012-11-04 21 views
8

Enums को सिंगलेट के लिए सबसे अच्छा तरीका माना जाता है और इसके कारणों में से एक यह है कि यह पूरी तरह से Serializable प्राप्त करता है।Enums, Singletons और Deserialization

लेकिन कैसे enums सिंगलटन की डी-क्रमबद्धता समस्या को रोकता है?

+0

एनम एक सिंगलटन है लेकिन सिंगलेट्स के विलुप्त होने की समस्याएं क्या हैं? – clinton

+2

@clinton: यदि आप सिंगलटन सीरियलज़ेबल बनाते हैं, और इस बारे में परवाह नहीं करते कि यह कैसे निराशाजनक है, तो आप हर बार अपने सिंगलटन के एक नए उदाहरण के साथ निराशाजनक होते हैं, जो इसकी सिंगलटननेस को तोड़ देता है। –

+0

@JBNizet जानकारी के लिए धन्यवाद। मैंने पहले ही सिंगलेट्स के बारे में उस मुद्दे को नहीं देखा था। या यह मुझे महत्वपूर्ण के रूप में मारा नहीं हो सकता है। – clinton

उत्तर

7

क्रमबद्धता तंत्र उन्हें special, specific way में संभालता है। लेकिन पारंपरिक सिंगलेट्स को readResolve() विधि को परिभाषित करके ठीक से deserialized किया जा सकता है जो अद्वितीय उदाहरण देता है। उदाहरण के लिए http://www.oodesign.com/singleton-pattern.html देखें।

1

सिंगलटन के लिए एनम का उपयोग करने के लिए तर्क के रूप में सीरियलाइजेशन बकवास है।

यदि एनम सिंगलटन राज्यपूर्ण है, तो राज्य क्रमबद्धकरण/deserialization के दौरान खो गया है।

यदि सिंगलटन स्टेटलेस है, तो इसकी पहचान परवाह कौन करता है?

+0

यदि सिंगलटन स्टेटलेस है, और कोड उपयोग करता है (उदाहरण के लिए) 'if (someVar == someSingleton.INSTANCE)', तो आप वास्तव में इसकी पहचान की परवाह करते हैं। –

+0

कोई असली दुनिया उपयोग केस नहीं है। जुशुआ ब्लॉक ने यह काम किया। आम तौर पर एक सिंगलटन को धारावाहिक बनाने की सुविधा के लिए एनम का उपयोग करके धारावाहिक नहीं होना चाहिए, यह गलत है। इसके अलावा, सिंगलटन एक कार्यान्वयन रणनीति है, कुछ ऐसा नहीं जो हमें इंटरफेस पर प्रचारित करना चाहिए। – irreputable