मैं एक DownloadManager
की एक डिजाइन करना है, लेकिन मेरी मुख्य सवाल सूचनाएं किसी तरह DownloadManager
इस प्राप्त करने के लिए है कि एक Download
DownloadManager
onUpdate()
की तरह करने के लिए भेज सकते हैं एक प्रगति बार, onError()
, onFinish()
, आदि को अपडेट करने से संबंधित है इसकी Download
एस से अधिसूचनाएं।पर्यवेक्षक पैटर्न या कॉलबैक?
- पर्यवेक्षक पैटर्न
- कॉलबैक
पर्यवेक्षक पैटर्न
असल में वहाँ 1 प्रत्यक्ष और एन पर्यवेक्षकों हैं:
2 संभव तरीके सोचा। मेरे मामले में DownloadManager एक पर्यवेक्षक और डाउनलोड पर्यवेक्षकों है, इसलिए संबंध एन Observables 1 पर्यवेक्षक है, बस विपरीत।
लाभ एक विधि में notify()
या update()
(जावा से) विधि में सभी संभावित अधिसूचनाओं को केंद्रीकृत करना है, मेरे मामले में केवल डाउनलोड प्रबंधक। मैं अधिसूचना के कोड के साथ अधिसूचना() विधि के लिए एक param पास कर सकते हैं।
नुकसान? मैं एक ऐसी चीज के लिए एक ओप पैटर्न का उपयोग कर रहा हूं जिसे कॉलबैक के साथ आसानी से किया जा सकता है। इसके अलावा, एन पर्यवेक्षक 1 पर्यवेक्षक यह अजीब कुछ है, कम से कम पर्यवेक्षक पैटर्न के साथ क्योंकि यह पैटर्न 1 पर्यवेक्षित एन पर्यवेक्षकों के लिए किया गया था, इसलिए मैं वास्तव में पर्यवेक्षक पैटर्न का उपयोग नहीं करूँगा।
कॉलबैक
बहुत पर्यवेक्षक पैटर्न के समान है। DownloadManager एक "श्रोता" (इंटरफ़ेस) लागू करता है। यह श्रोता फ़िनिश(), अपडडेट() इत्यादि पर अधिसूचना कार्यों को लागू करता है। फिर यह श्रोता सभी डाउनलोड में पंजीकृत होना चाहिए, इसलिए जब डाउनलोड समाप्त होता है तो यह listener.onFinish()
पर कॉल करेगा। इसके अतिरिक्त मैं पर्यवेक्षक पैटर्न की तरह डाउनलोड से इस विधियों को पैरामीटर पास कर सकता हूं।
लाभ: आसानी से उपयोग। नुकसान: कोई नहीं।
मैं शायद कॉलबैक का उपयोग करूंगा क्योंकि मेरी राय में 1 पर्यवेक्षक एन अवलोकन के लिए पर्यवेक्षक पैटर्न का उपयोग करने का कोई मतलब नहीं है।
और आप, कौन सा विकल्प उपयोग करेगा?
"कॉलबैक। लाभ: आसानी से उपयोग। नुकसान: कोई नहीं।" मुझे लगता है कि आपको अपना जवाब मिल गया है। –
कॉलबैक का उपयोग करने का एक नुकसान यह है कि वे प्रोग्राम के युग्मन को बढ़ाते हैं (क्योंकि वे आम तौर पर उन सभी कार्यों में एक नया पैरामीटर जोड़ते हैं जो उनका उपयोग करते हैं)। – synack
मुझे लगता है कि आपने कॉलबैक को फिर से समझाया है कि विभिन्न स्टेटस चेंज अपडेट की सुविधा के लिए एकाधिक (कुछ ओवरलोडेड) अपडेट (ऑब्जर्जेबल ओ, ऑब्जेक्ट एर्ग) विधियों के साथ ऑब्जर्वर डिज़ाइन पैटर्न फिर से समझाया गया है। –