2011-03-24 19 views
6

मेरे पास दो उदाहरण हैं जो आप आम तौर पर एक उदाहरण में समग्र कक्षा आरेख में देखते हैं।
* GetDescendents
* GetChild (int)समग्र पैटर्न डिजाइन प्रश्न

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

तो प्रश्न संख्या एक है, क्या आपके पास क्लाइंट को समझने के विरोध में समग्र पर GetImageFiles विधि नहीं होगी? और ऐसा मानते हुए, रचना के बाहर क्लाइंट कॉलर्स (जैसे ImageViewer) को बेनकाब करने के लिए GetDescendents कभी व्यावहारिक है?

GetChild (int) के बारे में दूसरा प्रश्न; क्या एक बच्चे को वापस करने के लिए एक सामान्य स्थिति सूचकांक है? GetDescendents में गहराई का एक स्तर? क्लाइंट उस विधि का उपयोग कैसे करेगा इसका एक उदाहरण क्या होगा?

चीयर्स,
Berryl

उत्तर

4

इन सवालों समग्र पैटर्न से प्रति के बारे में नहीं हैं, लेकिन आप कैसे एपीआई डिजाइन करते हैं और एक वर्ग के रूप में स्पष्ट रूप से अपनी मंशा डेवलपर संवाद के बड़े मुद्दे के बारे में।

उदाहरण के लिए, यदि आप अनुक्रमित तत्काल बच्चे को देने के लिए अपना GetChild(int) चाहते हैं, तो आप इसे GetChildAtIndex(int index) नाम दे सकते हैं; यदि आप चाहते हैं कि यह पदानुक्रम में बच्चों को एक निश्चित स्तर पर दे, तो आप इसे GetChildrenAtLevel(int level) नाम दे सकते हैं (ध्यान दें कि यह बहुवचन है और संग्रह लौटाता है)।

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

+0

बिल्कुल। मेरा सवाल यह है कि यह कभी भी * उन ग्राहकों को बच्चों के संचालन का पर्दाफाश करने के लिए समझ में आता है जो संरचना का हिस्सा नहीं हैं, या कम से कम इसके साथ बहुत घनिष्ठ संबंध हैं - यानी, वे क्लाइंट उपभोग्य योग्य ऑप बनाने के लिए आंतरिक संचालन हैं जैसे GetFilesOfType()। – Berryl

+0

@ बेरेल: यह आपकी कक्षा का प्रतिनिधित्व करने पर निर्भर करता है। "पैटर्न" केवल एक कार्यान्वयन विस्तार है, महत्वपूर्ण बात "अवधारणा" है। –

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