स्मृति चिन्ह पैटर्न के पीछे दर्शन


9

मैं इंटरनेट के विभिन्न स्रोतों से स्मृति चिह्न पर पढ़ रहा हूं। विभिन्न स्रोतों से भिन्न जानकारी ने मुझे भ्रम में छोड़ दिया है कि इस पैटर्न की वास्तव में आवश्यकता क्यों है।

Dofactory कार्यान्वयन का कहना है कि इस पद्धति मुख्य उद्देश्य सिस्टम की स्थिति बहाल करने के लिए है।

विकी का कहना है कि प्राथमिक इरादा सिस्टम पर परिवर्तनों को पुनर्स्थापित करने में सक्षम होना है। यह एक अलग प्रभाव देता है - यह कहते हुए कि एक प्रणाली के लिए संभव है कि कोई भी पुनर्स्थापना की आवश्यकता नहीं है। और पुनर्स्थापना की क्षमता इस की एक विशेषता है।

OODesign का कहना है कि

किसी बिंदु पर किसी वस्तु की आंतरिक स्थिति को पकड़ने के लिए कभी-कभी आवश्यक होता है और उस वस्तु को बाद में उस स्थिति में पुनर्स्थापित करने की क्षमता रखता है। ऐसा मामला त्रुटि या विफलता के मामले में उपयोगी है।

तो, मेरा सवाल यह है कि वास्तव में हम इस एक का उपयोग क्यों करते हैं? क्या यह पिछले राज्यों को बचाने के लिए है - या केयरटेकर और मेमेंटो के बीच इनकैप्सुलेशन को बढ़ावा देना है? इस प्रकार का एनकैप्सुलेशन इतना महत्वपूर्ण क्यों है?

संपादित करें: आने वालों के लिए, इस कार्यान्वयन को देखें!

संपादित करें : मैं अपनी समस्या के लिए एक स्मृति समाधान लागू करने में काम कर रहा हूं। मैं उस बारे में एक और प्रश्न पोस्ट करूंगा और उस प्रश्न को इस लिंक से जोड़ दूंगा। बहुमूल्य सुझावों के साथ जवाब देने के लिए धन्यवाद!

संपादन 3 : यहाँ मेरे नमूना कार्यान्वयन का लिंक है

जवाबों:


2

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

मैं कल्पना करता हूं कि एक मेमेंटो पैटर्न का उपयोग प्रदर्शन के लिए भी किया जा सकता है - रिवर्स स्टेट परिवर्तन के लिए सभी रिवर्स-कैलकुलेशन करने के बजाय, बस पिछली स्थिति से पुनर्स्थापित करें। कुछ फ़ंक्शंस वन-वे हैं, इसलिए जब तक आप पिछली स्थिति को स्टोर नहीं करते, कोई पूर्ववत नहीं है।

आप एक मेमेंटो पैटर्न का उपयोग कर सकते हैं, जैसे एक आवधिक, या सममित समारोह को याद करने के लिए। 0-180 डिग्री से सभी मूल्यों की गणना करें, फिर 180-360 से नकारात्मक मान प्राप्त करने के लिए उनके माध्यम से पीछे जाएं। बेहतर अभी तक, 0-90 से मूल्यों की गणना करें, फिर उन मूल्यों के माध्यम से 90-180, 180-270 के लिए आगे की ओर, और 270-360 से पीछे की ओर जाएं।

वर्ड में Ctrl-Z, या किसी भी सॉफ़्टवेयर के पूर्ववत कार्य को संभवतः स्मृति चिह्न पैटर्न का उपयोग करके या कुछ मामलों में, संभवतः प्रत्येक फ़ंक्शन को बदलने वाले फ़ंक्शन के रिवर्स द्वारा कार्यान्वित किया जाता है। दूसरे मामले में, जिन कार्यों को इतिहास कहा जाता है, वे स्मृति चिन्ह होंगे, इसलिए मुझे लगता है कि स्मृति चिन्ह का उपयोग हमेशा पूर्ववत किया जाता है।


संस्मरण पैटर्न का उपयोग रिवर्स गणना से बचने और आवधिक कार्यों के लिए किया जाता है - इस जानकारी के लिए धन्यवाद! अवधारणाओं को भेदने के लिए एक व्यावहारिक उदाहरण जैसा कुछ नहीं!
TheSilverBullet

जब आप कर रहे हैं यह तय करने के लिए वर्गमूल सन्निकटन के लिए न्यूटन की विधि जैसी किसी चीज के साथ भी इसका उपयोग किया जा सकता है। mitpress.mit.edu/sicp/full-text/book/… चूंकि अंतर्निहित फ़्लोटिंग-पॉइंट प्रतिनिधित्व की सीमित सटीकता है, इसलिए सभी नंबरों में अंततः दोहराव होगा। यदि आप जानते हैं कि पुराने सन्निकटन क्या थे, तो आप पहली बार जब आप उत्तर दोहराते हैं और अधिकतम सटीकता प्राप्त कर सकते हैं (कुछ समय और स्मृति की कीमत पर) अनुमानित करना बंद कर सकते हैं।
GlenPeterson

8

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

एक मेमेंटो का सबसे आम उपयोग जो मैंने देखा है वह पूर्ववत कार्यक्षमता का समर्थन करना है। यह समय के साथ आगे बढ़ने से रिडो कार्यक्षमता को संग्रहीत करने से भी संबंधित है।


मैंने इसका उपयोग कॉपी लॉजिक और क्रमबद्ध तर्क (वस्तुओं को तार पर भेजने, या राज्य को फ़ाइल में सहेजने के लिए) में भी किया है।
स्कॉट व्हिटलॉक

@ScottWhitlock राज्य को फ़ाइल में सहेजना मेमेंटो के लिए महत्वपूर्ण है। मेमेंटो ऑब्जेक्ट में एक निर्दिष्ट प्रारूप में खुद को लिखने और इस प्रारूप को पढ़ने से एक नया बनाने की क्षमता होगी, जबकि केयरटेकर बाहरी प्रारूप से राज्य को बाहरी प्रारूप या लोड स्थिति में सहेजने के लिए इंटरफ़ेस प्रदान करेगा - यह सिर्फ एक विस्तार है स्मृति में राज्य को बचाने के लिए। मैं वास्तव में यह कॉपी लॉजिक में उपयोग नहीं देख सकता, हालांकि। मुझे इसके बारे में बहुत कुछ सोचना होगा।
थॉमस ओवेन्स


@ThomasOwens, आपके स्पष्टीकरण में उस महत्वपूर्ण भाग के लिए धन्यवाद जो स्मृति चिन्ह मूल रूप से "बचाने" के लिए है। यह बहाल करने या नहीं करने के लिए कार्यान्वयनकर्ता का विवेक है! मुझे अपने सभी संदर्भों से गायब स्पष्टीकरण का यह हिस्सा मिला !!
TheSilverBullet

@ScottWhitlock, आपके स्मृति कार्यान्वयन के लिंक के लिए बहुत बहुत धन्यवाद! मैं न केवल इसके मूल उपयोग को समझने में सक्षम था, बल्कि आपके जैसे सहज उपयोग भी किया है!
TheSilverBullet

1

ये सभी परिभाषाएँ आपको उसी दिशा में आगे बढ़ाती हैं; वे सभी कह रहे हैं कि बिंदु अपनी पिछली स्थिति में कुछ बहाल करने में सक्षम है । वह चीज पूरी प्रणाली या सिर्फ एक वस्तु हो सकती है।

यह पैटर्न उपयोगी है यदि कोई रिकॉर्ड समय के साथ बदलता है, लेकिन आपके पास किसी भी समय किसी भी पिछली स्थिति में इसे पुनर्स्थापित करने में सक्षम होने के लिए व्यावसायिक आवश्यकता है। या वैकल्पिक रूप से, यदि आपको रिकॉर्ड देखने में सक्षम होने की आवश्यकता है क्योंकि यह किसी भी पिछले बिंदु समय पर था। कई प्रकार की प्रणालियों में इस प्रकार की आवश्यकताएं बहुत आम हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.