2011-01-03 17 views
12

मैं एक DownloadManager की एक डिजाइन करना है, लेकिन मेरी मुख्य सवाल सूचनाएं किसी तरह DownloadManager इस प्राप्त करने के लिए है कि एक DownloadDownloadManageronUpdate() की तरह करने के लिए भेज सकते हैं एक प्रगति बार, onError(), onFinish(), आदि को अपडेट करने से संबंधित है इसकी Download एस से अधिसूचनाएं।पर्यवेक्षक पैटर्न या कॉलबैक?

  • पर्यवेक्षक पैटर्न
  • कॉलबैक

पर्यवेक्षक पैटर्न

असल में वहाँ 1 प्रत्यक्ष और एन पर्यवेक्षकों हैं:

2 संभव तरीके सोचा। मेरे मामले में DownloadManager एक पर्यवेक्षक और डाउनलोड पर्यवेक्षकों है, इसलिए संबंध एन Observables 1 पर्यवेक्षक है, बस विपरीत।

लाभ एक विधि में notify() या update() (जावा से) विधि में सभी संभावित अधिसूचनाओं को केंद्रीकृत करना है, मेरे मामले में केवल डाउनलोड प्रबंधक। मैं अधिसूचना के कोड के साथ अधिसूचना() विधि के लिए एक param पास कर सकते हैं।

नुकसान? मैं एक ऐसी चीज के लिए एक ओप पैटर्न का उपयोग कर रहा हूं जिसे कॉलबैक के साथ आसानी से किया जा सकता है। इसके अलावा, एन पर्यवेक्षक 1 पर्यवेक्षक यह अजीब कुछ है, कम से कम पर्यवेक्षक पैटर्न के साथ क्योंकि यह पैटर्न 1 पर्यवेक्षित एन पर्यवेक्षकों के लिए किया गया था, इसलिए मैं वास्तव में पर्यवेक्षक पैटर्न का उपयोग नहीं करूँगा।

कॉलबैक

बहुत पर्यवेक्षक पैटर्न के समान है। DownloadManager एक "श्रोता" (इंटरफ़ेस) लागू करता है। यह श्रोता फ़िनिश(), अपडडेट() इत्यादि पर अधिसूचना कार्यों को लागू करता है। फिर यह श्रोता सभी डाउनलोड में पंजीकृत होना चाहिए, इसलिए जब डाउनलोड समाप्त होता है तो यह listener.onFinish() पर कॉल करेगा। इसके अतिरिक्त मैं पर्यवेक्षक पैटर्न की तरह डाउनलोड से इस विधियों को पैरामीटर पास कर सकता हूं।

लाभ: आसानी से उपयोग। नुकसान: कोई नहीं।

मैं शायद कॉलबैक का उपयोग करूंगा क्योंकि मेरी राय में 1 पर्यवेक्षक एन अवलोकन के लिए पर्यवेक्षक पैटर्न का उपयोग करने का कोई मतलब नहीं है।

और आप, कौन सा विकल्प उपयोग करेगा?

+1

"कॉलबैक। लाभ: आसानी से उपयोग। नुकसान: कोई नहीं।" मुझे लगता है कि आपको अपना जवाब मिल गया है। –

+0

कॉलबैक का उपयोग करने का एक नुकसान यह है कि वे प्रोग्राम के युग्मन को बढ़ाते हैं (क्योंकि वे आम तौर पर उन सभी कार्यों में एक नया पैरामीटर जोड़ते हैं जो उनका उपयोग करते हैं)। – synack

+0

मुझे लगता है कि आपने कॉलबैक को फिर से समझाया है कि विभिन्न स्टेटस चेंज अपडेट की सुविधा के लिए एकाधिक (कुछ ओवरलोडेड) अपडेट (ऑब्जर्जेबल ओ, ऑब्जेक्ट एर्ग) विधियों के साथ ऑब्जर्वर डिज़ाइन पैटर्न फिर से समझाया गया है। –

उत्तर

3

कॉलबैक एफटीडब्ल्यू। यह आसान है, और अधिकांश मामलों में, सादगी परियोजना के हर दूसरे पहलू को सकारात्मक तरीके से प्रभावित करती है, जिसमें विकास, डिबगिंग, अनुकूलन, दस्तावेज़ीकरण और आगे रखरखाव शामिल है।

+2

5 साल बाद ... "सही तरीका" पर्यवेक्षक पैटर्न प्रतीत होता है। अधिकांश जावास्क्रिप्ट एपीआई देखें: वे कॉलबैक को वादे द्वारा बदल रहे हैं। कोणीय 2 को देखें: उन्होंने ऑब्जेर्बल्स द्वारा कॉलबैक और वादे को बदल दिया है। तो कॉलबैक आसान है, लेकिन लंबी अवधि के लिए एक अच्छा विकल्प नहीं है। – CedX

3

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

इस मामले पर विचार करें जब आपके पास एकाधिक DownloadManagers हो (शायद यह आपकी विशेष स्थिति के लिए वैध उपयोग केस नहीं है)। आपको दोनों को पंजीकृत करने की आवश्यकता होगी। यदि आपके पास और भी अधिक है तो आपको उन सभी को पंजीकृत करना होगा।बहुत लंबी सूची, साथ ही आपको श्रोताओं के प्रबंधन को Download एस

+0

वास्तव में, मेरा डाउनलोड प्रबंधक एक सिंगलटन है। मेरे आवेदन में मेरे पास केवल एक उदाहरण है। –

4

में एक विकल्प भी है, जो ऑब्जर्वर/कॉलबैक दृष्टिकोण के विपरीत है। आप शो के सक्रिय खिलाड़ियों से DownloadManager के ग्राहकों को बदल सकते हैं। प्रबंधक से संदेश की प्रतीक्षा करने के बजाय वे नियमित रूप से अपनी स्थिति का अनुरोध करेंगे।

इस प्रकार आपकी डाउनलोड प्रक्रिया अंत उपयोगकर्ता के लिए बहुत आसान दिखाई देगी। और आप इसे बेहतर नियंत्रित करने में सक्षम होंगे।

बेशक, आपको दो धागे का उपयोग करना होगा। या आपको DownloadManager को छोटे चरणों में काम करने, काम करने के एक अटूट टुकड़े को चलाने के बजाए अपने ग्राहक को नियंत्रण लौटने के लिए सिखाना होगा।

3

पर्यवेक्षक अधिक उपयुक्त है क्योंकि प्रबंधक को कई उदाहरणों के लिए अनुरोध भेजने की आवश्यकता है।

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

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