2009-03-31 10 views

उत्तर

19

जोश ब्लोच के प्रभावी जावा, द्वितीय संस्करण के अंतिम खंड में एक अच्छा वर्णन है।

मान लें कि आपके पास कक्षा A है जिसे आप क्रमबद्ध बनाना चाहते हैं। आप पहले इसे Serializable लागू करने के लिए घोषित करते हैं। फिर आप एक तथाकथित "धारावाहिक प्रॉक्सी" को वापस करने के लिए क्रमबद्धता विधि writeReplace() का उपयोग करें जिसे A के उदाहरण के स्थान पर क्रमबद्ध किया जाएगा। writeReplace() विधि को सार्वजनिक होने की आवश्यकता नहीं है। A पर डिफ़ॉल्ट क्रमबद्धता कभी भी नहीं आती है, इसलिए A के सभी एपीआई उचित बनाए रखा जा सकता है।

आमतौर पर, प्रॉक्सी को एक निजी स्थैतिक घोंसला वर्ग के रूप में लागू किया जाता है जिसे स्वयं पढ़ने/लिखने की प्रक्रिया के पूर्ण नियंत्रण के लिए Serializable (या Externalizable) लागू करना होगा। चूंकि प्रॉक्सी निजी है, इसके कार्यान्वयन के विवरण, जैसे नो-एर्ग कन्स्ट्रक्टर और म्यूटेबल होने के कारण, छुपाया जाएगा।

प्रॉक्सी लिखने के लिए मूल वस्तु की पर्याप्त मात्रा में स्टोर करता है ताकि यह deserialization पर वस्तु का पुनर्गठन कर सके। Deserialization पर, प्रॉक्सी विधि A के उदाहरण को वापस करने के लिए विधि का उपयोग करता है। सिंगलेट्स के लिए, यह सिंगलटन इंस्टेंस ही हो सकता है।

मैंने उदाहरणों के साथ एक विस्तृत ब्लॉग प्रविष्टि लिखी, Serializing Immutables and Singletons with a Serialization Proxy

+0

मैं सोच रहा था कि धारावाहिक प्रॉक्सी बाहरी हो सकता है या नहीं। किताब केवल Serializable का उल्लेख है। धन्यवाद! –

संबंधित मुद्दे