newInstance()
अक्सर एक तरह से सीधे वस्तु के डिफ़ॉल्ट निर्माता बुला बिना एक वस्तु का दृष्टांत के रूप में प्रयोग किया जाता है। उदाहरण के लिए, यह अक्सर एक सिंगलटन डिजाइन पैटर्न लागू करने के लिए प्रयोग किया जाता है:
public class Singleton {
private static final Singleton instance = null;
// make the class private to prevent direct instantiation.
// this forces clients to call newInstance(), which will
// ensure the class' Singleton property.
private Singleton() { }
public static Singleton newInstance() {
// if instance is null, then instantiate the object by calling
// the default constructor (this is ok since we are calling it from
// within the class)
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
इस मामले में, प्रोग्रामर ग्राहक वर्ग का एक उदाहरण पुनः प्राप्त करने के newInstance()
कॉल करने के लिए बाध्य करती है। यह महत्वपूर्ण है क्योंकि केवल एक डिफ़ॉल्ट कन्स्ट्रक्टर प्रदान करने से क्लाइंट कक्षा के कई उदाहरणों तक पहुंच सकता है (जो सिंगलटन संपत्ति के खिलाफ जाता है)।
Fragment
एस के मामले में, स्थिर फैक्ट्री विधि newInstance()
प्रदान करना अच्छा अभ्यास है क्योंकि हम अक्सर नए तत्काल ऑब्जेक्ट में प्रारंभिक तर्क जोड़ना चाहते हैं। क्लाइंट को डिफ़ॉल्ट कन्स्ट्रक्टर कॉल करने और मैन्युअल रूप से खंड तर्कों को सेट करने के बजाय, हम newInstance()
विधि प्रदान कर सकते हैं जो उनके लिए यह करता है। उदाहरण के लिए,
public static MyFragment newInstance(int index) {
MyFragment f = new MyFragment();
Bundle args = new Bundle();
args.putInt("index", index);
f.setArguments(args);
return f;
}
कुल मिलाकर, जबकि दोनों के बीच अंतर ज्यादातर डिजाइन का मामला है, इस अंतर को वास्तव में महत्वपूर्ण है क्योंकि यह अमूर्त की एक अन्य स्तर प्रदान करता है और कोड बहुत आसान समझने के लिए बनाता है।
स्रोत
2012-01-17 04:03:54
आम तौर पर, सिंगल इंस्टेंस का उपयोग सिंगलटन डिज़ाइन पैटर्न के लिए किया जाता है। –