मैं कहूंगा कि यह एक बहुत ही विशेषतापूर्ण Chain Of Responsibility
है। आपके माता-पिता कंटेनर संरचना में पॉइंटर की आवश्यकता होने का एकमात्र कारण है निहित तत्वों की पहुंच के भीतर पैरेंट कंटेनर कार्यक्षमता रखना। इस प्रकार, को "चेन" को ट्रिकल करने के अनुरोध को अनुमति देने के लिए आवश्यक कार्यान्वयन विस्तार के रूप में देखा जा सकता है जब तक यह सही "स्तर" पर संभाला न जाए।
एक कंटेनर/निहित रिश्ते के साथ, "सही" स्तर केवल एक स्तर ऊपर है, और ट्रिकल अप पर्याप्त स्तरों से गुजरता नहीं है (क्योंकि केवल एक स्तर है) ताकि एक आदर्श उदाहरण के रूप में अधिक रुचि पैदा हो सके पैटर्न। फिर भी, Chain of Responsibility
के पीछे सामान्य विचार अभी भी हैं; एक श्रृंखला में एक बिंदु पर एक अनुरोध किया जाता है जो इसे संभाल नहीं सकता है, और परिवर्तन में एक अलग बिंदु पर संभाला जा सकता है।
एक छोटे गैर-जेनेरिक कंटेनर/निहित रिश्ते के साथ, इन दो लिंक श्रृंखलाओं के युग्मन काफी तंग हो सकते हैं। उदाहरण के लिए, आपके उदाहरणों में सामान्य "कमांड" हैंडलिंग फ्रेमवर्क की कमी है (क्योंकि कमांड भाषा सेट छोटा है), और इस तरह के ढांचे को आम तौर पर एक कमांड/संदेश ऑब्जेक्ट की आवश्यकता होती है (प्रकार सुरक्षा के लिए)। यह एक बहुत अधिक ओवरहेड है, एक सूची के लिए जो सिर्फ तत्वों को तत्व स्तर पर सीधे सूचित करना चाहता है जिसे वे सूची से हटाना चाहते हैं।
और हाँ, there is a C2 pattern's page for it ... यदि आप मेरे तर्क से सहमत हैं।
स्रोत
2012-02-16 23:08:55
बस अपनी सूची में जोड़ने के लिए, विंडोज के समान 'CONTAINING_RECORD' मैक्रो है। मैं 'पैटर्न' के लिए एक सामान्य नाम के बारे में नहीं जानता। –
जब कंटेनर डेटा संरचनाओं को लागू करने के लिए उपयोग किया जाता है, तो सी ++ दुनिया में इस तकनीक को "घुसपैठ करने वाले कंटेनर" को बढ़ावा दें। हालांकि कंटेनर_ओफ़ सामान्य संदर्भों जैसे सूचियों और हैश तालिकाओं को लागू करने के बजाय अन्य संदर्भों में अधिक सामान्य और उपयोगी है। – nos