MutableLiveData LiveData से विस्तारित हो रहा है। LiveData की संरक्षित विधियों को केवल स्वयं या उपवर्गों द्वारा संबोधित किया जा सकता है। तो इस मामले में MutableLiveData LiveData का एक उप वर्ग होने के नाते इन संरक्षित तरीकों तक पहुंच सकता है।
आप क्या करना चाहते हैं, एक उदाहरण पर गौर करें और देखें कि क्या कोई बदलाव हैं। लेकिन एक ही समय में आप नहीं चाहते हैं कि कोई भी "बाहरी व्यक्ति" उस उदाहरण को बदले जो आप देख रहे हैं। एक अर्थ में यह एक समस्या पैदा करता है, जैसा कि आप एक ऐसी वस्तु रखना चाहते हैं जो परिवर्तनशील हो, किसी भी नई स्थिति को अद्यतन करने के लिए, और परिवर्तनशील न हो, यह सुनिश्चित करने के लिए कि कोई भी इस उदाहरण को अद्यतन नहीं कर सकता है। ये दोनों एक-दूसरे के साथ संघर्ष करते हैं, लेकिन एक अतिरिक्त परत बनाकर हल किया जा सकता है।
तो आप जो भी करते हैं, अपनी कक्षा, LiveData को एक ऐसे वर्ग के साथ बढ़ाते हैं, जो अपने तरीकों तक पहुँच सकता है। उप परत, इस मामले में MutableLiveData, अपने माता-पिता (/ सुपर) के संरक्षित तरीकों का उपयोग करने में सक्षम है।
अब आप उदाहरण बनाना शुरू करते हैं, और MutableLiveData के अपने पर्यवेक्षक उदाहरण बनाते हैं। उसी समय आप इसी उदाहरण का जिक्र करते हुए LiveData उदाहरण बनाते हैं। क्योंकि MutableLiveData LiveData का विस्तार करता है, कोई भी MutableLiveData उदाहरण एक LiveData ऑब्जेक्ट है और इसलिए इसे LiveData चर द्वारा संदर्भित किया जा सकता है।
अब चाल लगभग पूरी हो चुकी है। आप केवल LiveData उदाहरण को उजागर करते हैं, कोई भी इसके संरक्षित तरीकों का उपयोग नहीं कर सकता है, और न ही इसे सुपर में डाल सकता है (शायद संकलन के समय, लेकिन यह रन नहीं होगा: रनटाइम त्रुटि)। और आप वास्तविक उप वर्ग उदाहरण को निजी रखते हैं, इसलिए यह केवल उन लोगों द्वारा बदला जा सकता है जो इंस्टेंस के तरीकों का उपयोग करते हैं।
//create instance of the sub class and keep this private
private val _name: MutableLiveData<String> = MutableLiveData<String>()
//create an instance of the super class referring to the same instance
val name: LiveData<String> = _name
name.value.observe(.....)
अब जब कोई परिवर्तन लागू किया जाता है तो सुपर क्लास सूचित करता है।
_name.postValue(...)
ब्लॉकचोट आम तौर पर बोलना, विरासत का एक ऐसा रूप है (केवल बदलाव के लिए कुछ तरीकों की दृश्यता में वृद्धि) एक प्रसिद्ध अभ्यास है और कुछ परिदृश्य क्या हैं जहां यह उपयोगी हो सकता है (यह मानते हुए कि हमारे पास सभी कोड तक पहुंच है)?
हां, यह काफी प्रसिद्ध है और ऊपर वर्णित यह एक सामान्य परिदृश्य है। ऑब्जर्वर पैटर्न को हटा दें, और इसे एक सेट में प्राप्त करें / फॉर्म प्राप्त करें इससे बस उतना ही लाभ होगा। जहां आप इसे लागू करते हैं, उस पर निर्भर करते हुए, अंत में कोई सुनहरा नियम नहीं है।
LiveData
अपरिवर्तनीय है, क्योंकि ग्राहक आंतरिक स्थिति को बदल नहीं सकता है, इसलिए धागा-सुरक्षित