2012-01-31 20 views
5

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

वर्तमान में, इन सेवाओं में से किसी एक का उपयोग करने के लिए आपको इसे [[टास्क सर्विस सर्विस एटोक] init] बनाना है, लेकिन मैंने फैसला किया कि यह प्रत्येक सेवा को सिंगलटन ऑब्जेक्ट में बनाने के लिए और अधिक समझ में आता है।

क्या सिंगलटन ऑब्जेक्ट्स देखना आम है जो प्रतिनिधियों के संदर्भ में है? डिजाइन के साथ मेरा मुख्य मुद्दा यह है कि प्रत्येक ऑब्जेक्ट, जब भी किसी विशेष सेवा के उपयोग की आवश्यकता होती है, को सेवा को आमंत्रित करने से पहले खुद को प्रतिनिधि के रूप में सेट करना होगा, जो मेरे लिए बिल्कुल सही नहीं लगता है ... क्या होगा यदि कोई अन्य वस्तु खुद को प्रतिनिधि के रूप में स्थापित करने और सेवा का आह्वान करने के बीच में खुद को प्रतिनिधि के रूप में स्थापित करना था?

अग्रिम में बहुत धन्यवाद!

सादर, निक

उत्तर

4

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

+0

मुझे नहीं पता कि क्या एक प्रतिनिधि बहुसंकेतक (किसी प्रकार की प्रसारक?) है है, लेकिन यह रास्ता मेरे लिए बहुत जटिल कोशिश करते हैं और लागू करने के लिए लगता है, तो मैं कोशिश करते हैं और ऐसा कुछ के स्पष्ट रहेंगे! एक ऑपरेशन कतार लागू करने के लिए, क्या मैं यह सोचने में सही होगा कि प्रत्येक विधि को एक प्रतिनिधि/पैरामीटर को तर्क के रूप में लेना होगा?तो "अनुरोध", कतारबद्ध किया जा सकता है, संबंधित प्रतिनिधियों को एक बार पूरा करने के लिए बुलाया जा सकता है? –

+0

एक प्रतिनिधि मल्टीप्लेक्सर एक ऐसा शब्द है जिसे मैंने आपके सिंगलटन के अंदर लिखने वाले कोड के लिए बनाया है, यह जानने के लिए कि कौन सा प्रतिनिधि किसी दिए गए परिणाम को भेजने के लिए है। एक सेशन क्यू प्रत्येक ऑपरेशन (प्रतिनिधि की एक प्राप्त और अधिसूचना) को बेहतर ढंग से समाहित करेगा। तो हाँ, अनुरोध इस तरह से कतारबद्ध किया जाएगा। – Rayfleck

4

जब अवसर सिंगलटन ऑब्जेक्ट के उपयोग की गारंटी देता है, तो मैं हमेशा उद्धरण के कारण प्रतिनिधिमंडल से बचता हूं। एक सिंगलटन के उपभोक्ता (कुछ बदसूरत कोडिंग के बिना) नहीं जानते हैं, अगर वे किसी अन्य उपभोक्ता के पैर की अंगुली पर कदम उठा रहे हैं तो खुद को सिंगलटन के एकमात्र प्रतिनिधि के रूप में स्थापित कर सकते हैं। NSNotifications नौकरी के लिए एक बहुत साफ उपकरण है; श्रोताओं की मनमानी संख्या किसी भी देखभाल के बिना नोटिफिकेशन का उपभोग कर सकती है जो और सुन सकती है।

कक्षाओं के बीच स्पष्ट स्वामित्व होने पर प्रतिनिधि सबसे अच्छा काम करता है। कोई भी सिंगलटन का मालिक नहीं है।

+0

मुझे स्वीकार करना है, मुझे वास्तव में NSNotifications के बारे में बहुत कुछ नहीं पता है, इसलिए इसे देखना होगा। ऐसा लगता है कि यह अन्य भाषाओं में एक अवधारणा के समान हो सकता है, हालांकि मैं परिचित हूं, जहां "श्रोताओं" को एक सूची में जोड़ा जाता है और प्रत्येक श्रोता को कुछ घटनाओं पर अधिसूचित किया जाता है। यह मुझे सूट करेगा, मुझे लगता है, तो टिप के लिए धन्यवाद। –

+0

(मैट के पैर की उंगलियों पर कदम नहीं उठाएगा ...) हां, एनएसएनोटिफिकेशन श्रोताओं के समान हैं (हम उन्हें पर्यवेक्षकों कहते हैं)। आईएमओ, अगर आप इस हफ्ते सिर्फ एक तकनीक सीखते हैं, तो यह होगा - वे अविश्वसनीय रूप से उपयोगी हैं, खासकर अन-युग्मन वर्गों और उनके संबंधित कार्यों में। – Rayfleck

+0

टिप के लिए धन्यवाद। मैं तुरंत NSNotifications की जांच करूँगा! –

0

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

0

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

प्रतिनिधि 1 से 1 संचार के लिए उपयोग किए जाते हैं, उदाहरण के लिए: आप उदाहरण के रूप में ले सकते हैं आपके पास दो कक्षाएं टीवी और रिमोट कंट्रोल डिवाइस हैं। आप टीवी के चैनल को बदलना चाहते हैं। चैनल बदलने के लिए टीवी के प्रतिनिधि तरीके रिमोट कंट्रोल डिवाइस क्लास में लागू किए गए हैं। तो आप रिमोट कंट्रोल डिवाइस का उपयोग करते हैं और आप टीवी के चैनल को बदलते हैं।

सिंगलटन जबकि प्रतिनिधिमंडल पैटर्न 1 1 के लिए संचार के लिए आम तौर पर प्रयोग किया जाता है, कई रिसीवर के साथ संवाद करने के लिए प्रयोग किया जाता है।

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

  • कोई संबंधित समस्या नहीं^_^