2011-07-07 9 views
8

जैसा कि हम जानते स्मृति चिन्ह पैटर्न कैप्सूलीकरण उल्लंघन करने के बिना है, पर कब्जा करने के लिए और एक वस्तु की आंतरिक स्थिति को बाह्यरूप और मूल राज्य के ज्ञान के बिना बाद में पुन: दावा किया जा सकता है।java.io.Serializable Memento पैटर्न कैसे है?

मेरा प्रश्न यहाँ आता है कैसे java.io.Serializable इस पद्धति के तहत आ रहा है क्योंकि कभी हम कर रहे हैं जब किसी भी निजी चर serializing और एक ही समय में एक फाइल करने के लिए वस्तु राज्य लिख निजी varible के मूल्य दुनिया और कैप्सूलीकरण के लिए खुला है ऐसा लगता है कि यहां असफल रहा है।

+0

[मेमेंटो पैटर्न पर विकिपीडिया लेख] (http://en.wikipedia.org/wiki/Memento_pattern) में 'encapsulation' का कोई अवसर नहीं है। –

+0

@Andre, कृपया नीचे दिए गए लिंक देखें। http://www.javacamp.org/designPattern/ – BOSS

+0

आपके संदर्भ के लिए एक और लिंक। http://sourcemaking.com/design_patterns/memento – BOSS

उत्तर

4

Wikipedia article on the Memento pattern encapsulation के बारे में कुछ भी उल्लेख नहीं करता है, वास्तव में, वहां दिया गया उदाहरण वास्तव में एक मेमेंटो में एक निजी चर में आयोजित राज्य को कैप्चर करता है।

Encapsulation ('वस्तु के घटकों में से कुछ के लिए उपयोग को प्रतिबंधित करने के लिए एक भाषा तंत्र') आप कैसे एक वस्तु की आंतरिक स्थिति को बदलने के क्रम में कोड लिखने के लिए है करने के लिए संदर्भित करता है।

एक वस्तु की आंतरिक स्थिति हालांकि इस तरह के एक स्ट्रिंग की सामग्री के रूप में बाहरी इनपुट के द्वारा निर्धारित किया जा सकता था फ़ाइल है जो इसे से पढ़ा जाता था या क्या डाटा नेटवर्क से प्राप्त किया गया था पर निर्भर करता है। एक चेकबॉक्स 'राज्य इस बात पर निर्भर करता है कि उपयोगकर्ता ने इसे चेक किया है या नहीं, जबकि कक्षा में संबंधित क्षेत्र में निजी पहुंच हो सकती है और राज्य अन्य वर्गों के लिए केवल पढ़ा जा सकता है।

उन्हें निजी उपयोग के तहत रखकर क्षेत्रों की रक्षा में मदद करने के लिए डेवलपर के लिए एक सुसंगत राज्य में वस्तुओं के राज्यों रखने के लिए, यानी बचने कि खेतों एक असंगत स्थिति के लिए कोड से उस वर्ग के बाहर (उदाहरण के लिए यदि का मान सेट कर रहे हैं मतलब है क्षेत्र A फ़ील्ड B के मान पर निर्भर करता है)।

ऐसा नहीं है कि इस डेटा गुप्त माना जाता है इस अर्थ में 'गोपनीयता' के साथ कोई संबंध नहीं है। बेशक, कोई अन्य वर्ग लिख सकता है जो तब धारावाहिक निजी क्षेत्रों को पढ़ता है और उन्हें एक अलग वर्ग में सार्वजनिक रूप से उपलब्ध कराता है या आप धारावाहिक फ़ाइल को भी संपादित कर सकते हैं लेकिन मुझे यकीन नहीं है कि इससे कोई क्या हासिल करेगा।

+1

+1 पर नहीं है। Encapsulation का अर्थ है कि एक वर्ग प्रोग्राम में अन्य इकाइयों को सीधे डेटा/विधियों तक पहुंचने और संशोधित करने की अनुमति नहीं देता है। यदि encapsulation कुल और आंशिक अस्पष्टता का मतलब है, तो एक वर्ग जो अपने निजी डेटा सदस्यों को एक पाठ फ़ाइल में सहेजता है? Encapsulation सिद्धांतों का उल्लंघन करने वाला? असल में इसका मतलब यह होगा कि ऑब्जेक्ट ओरिएंटेड डाटाबेस मैनेजमेंट सिस्टम इंकापुलेशन का उल्लंघन करेंगे। और वह ओ-ओ गुरु को बहुत परेशान करेगा :-) – 2rs2ts

0

From Wikipedia's encapsulation article: एक प्रोग्रामिंग भाषा कैप्सूलीकरण में संयोजन को करने के लिए दो संबंधित लेकिन अलग विचार से एक के लिए संदर्भित किया जाता है, और कभी कभी:

  • वस्तु के घटकों में से कुछ के लिए उपयोग को प्रतिबंधित करने के लिए एक भाषा तंत्र।
  • कि तरीकों (या अन्य कार्यों) है कि डेटा पर काम के साथ डेटा की बंडलिंग की सुविधा एक भाषा निर्माण। जब तक प्राप्तकर्ता कुकी गुजरता

From the opaque object article: सामग्री अपारदर्शी और आम तौर पर व्याख्या नहीं कर रहे हैं (या हमारे कारण में, वस्तु) वापस प्रेषक या बाद में शायद एक अन्य कार्यक्रम के लिए डेटा।

Encapsulation टूटी नहीं है। स्मृति चिन्ह पैटर्न देखभालकर्ता वस्तु को स्मृति चिन्ह को बदलने से रोकता है, ताकि उत्प्रेरक इसे रोलबैक या अन्य उपयोगिताओं के लिए ले जा सके।

0

मेरे समझ मेमेंटो पैटर्न स्मृति चिन्ह के प्रारूप/अस्पष्टता/सुरक्षा के बारे में कुछ भी निर्दिष्ट नहीं करता है/खुद टोकन। स्मृति चिन्ह का प्रारूप (मानव-पठनीय, पूरी तरह से एन्क्रिप्टेड, या बीच में कहीं भी) पैटर्न के लिए अप्रासंगिक है।

मैं तर्क दूंगा कि सीरियलाइजेशन (एक्सएमएल या बाइनरी) एक मेमेंटो कार्यान्वयन का एक अच्छा उदाहरण है। तथ्य यह है कि यह ऑब्जेक्ट आंतरिक का खुलासा कर सकता है इसका मतलब यह हो सकता है कि यह आपके प्रोजेक्ट के लिए सबसे अच्छा कार्यान्वयन नहीं है। हालांकि, यह अभी भी पैटर्न का एक वैध कार्यान्वयन है। :)

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