/ जावा में स्थिर पहुंच संशोधक के साथ / सिंगलटन को लागू करें - जावा, डिज़ाइन-पैटर्न, सिंगलटन

जावा में जावा एक्सेस, डिज़ाइन-पैटर्न, सिंगलटन में स्थिर पहुंच संशोधक के साथ सिंगलटन को कार्यान्वित करें

सिंगलटन डिजाइन पैटर्न के साथ उदाहरण वर्ग।

  class Singleton {
private static Singleton instance;
private int x;

private Singleton() {
x = 5;
}

public static synchronized Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
public void doSomething() {
System.out.println("Hello");
}
}

मैं सिर्फ सोच रहा हूं कि क्या मैं इस वर्ग को उसी चर और तरीकों के साथ बना सकता हूं जिसे स्थिर घोषित किया गया है। क्या यह एकल के समान है?

उत्तर:

जवाब के लिए 0 № 1

एकाकी वस्तु केवल तभी माना जाना चाहिए जब निम्नलिखित तीनों मानदंड संतुष्ट हों:

  1. एकल उदाहरण का स्वामित्व यथोचित असाइन नहीं किया जा सकता है
  2. आलसी आरंभीकरण वांछनीय है
  3. अन्यथा के लिए वैश्विक पहुंच प्रदान नहीं की गई है

हाँ, यह वही है।


जवाब के लिए 0 № 2

अगर आपको वास्तव में एक सिंगलटन पैटर्न को लागू करने की आवश्यकता है, तो मैं एक एनम का उपयोग करने की सलाह दूंगा:

public enum MySingelton{
INSTANCE;
private final String[] variable = new String[]{"test", "test2};
public void randomFunction(){
}
}

इसके साथ कॉल करें:

MySingelton.INSTANCE.randomFunction();

एक enum कार्यान्वयन के साथ यह गारंटी है किकेवल एक उदाहरण बनाया जाता है और यह कि यह हर समय उपलब्ध है। इसके अलावा इसे एक से अधिक प्रतियां बनाने के बिना सिंगेल्टन को क्रमबद्ध करना और इसके लिए संभव बनाना संभव है।

अधिक जानकारी यहां पाई जा सकती है:

जावा में सिंगलटन पैटर्न को लागू करने का एक प्रभावी तरीका क्या है?

http://www.drdobbs.com/jvm/creating-and-destroying-java-objects-par/208403883?pgno=3


जवाब के लिए 0 № 3

चूंकि सिंगलटन पैटर्न का उद्देश्य यह सुनिश्चित करना है कि किसी वर्ग का एकल उदाहरण मौजूद है, हां, आप उसी प्रभाव को प्राप्त करने के लिए स्थैतिक सदस्यों का उपयोग कर सकते हैं।

तो इसके बजाय

public class Singleton {
private static Singleton theInstance = new Singleton();
private int aVar = 10;
public void aMethod() {
System.out.println(aVar);
}
public static Singleton getInstance() {
return theInstance;
}
}

तुम यह कर सकते थे

public class FakeSingleton {
private static int aVar = 10;
public static void aMethod() {
System.out.println(aVar);
}
}

और वास्तव में एक ही कार्यक्षमता है (के बजाय) Singleton.getInstance().aMethod() आप लिखेंगे FakeSingleton.aMethod())।

यदि आप आलसी इनिशियलाइज़ेशन चाहते हैं, तो सिंगलटन पैटर्न का उपयोग करना फायदेमंद हो सकता है, ताकि सिंग्लटन को केवल तब ही इनिशियलाइज़ किया जा सके जब यह पहली बार आवश्यक हो:

public class Singleton {
private static Singleton theInstance = null;
private int aVar = 10;
public void aMethod() {
System.out.println(aVar);
}
public static Singleton getInstance() {
if (theInstance == null) {
theInstance = new Singleton();
}
return theInstance;
}
}

(ध्यान दें कि उपरोक्त थ्रेड सुरक्षित नहीं है, मल्टीथ्रेडेड कोड में आपको सिंक्रोनाइज़ेशन जोड़ना होगा।)