एंड्रॉइड में सिंगलटन पैटर्न का उपयोग करके HashMap स्टोर करना
यह ट्यूटोरियल सिंगलटन डिज़ाइन पैटर्न को लागू करके एप्लिकेशन-वाइड HashMap स्टोरेज के लिए एक केंद्रीय एक्सेस पॉइंट बनाने का तरीका दिखाता है।
सिंगलटन पैटर्न क्या है?
सिंगलटन एक डिज़ाइन पैटर्न है जो एक वर्ग के इंस्टेंशिएशन को एक ही इंस्टेंस तक सीमित करता है। यह साझा संसाधनों तक पहुंच को नियंत्रित करने और डेटा स्टोर के लिए एक वैश्विक एक्सेस पॉइंट प्रदान करने के लिए उपयोगी है।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project चुनें।
चरण 2: लेआउट फ़ाइल (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<Button
android:id="@+id/btnSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="सिंगलटन में HashMap सेव करें"
android:padding="16dp" />
</LinearLayout>
चरण 3: SingletonHashMap.java (सिंगलटन वर्ग)
package com.example.singletonhashmap;
import android.content.Context;
import java.util.HashMap;
import java.util.Map;
public class SingletonHashMap {
// एकमात्र इंस्टेंस
private static volatile SingletonHashMap instance;
private final Map<String, Double> dataMap = new HashMap<>();
private Context appContext;
// निजी कंस्ट्रक्टर
private SingletonHashMap() {}
// थ्रेड-सेफ इंस्टेंस प्राप्ति (डबल-चेक्ड लॉकिंग)
public static SingletonHashMap getInstance() {
if (instance == null) {
synchronized (SingletonHashMap.class) {
if (instance == null) {
instance = new SingletonHashMap();
}
}
}
return instance;
}
// एप्लिकेशन कंटेक्स्ट इनिशियलाइज़ करें
public void init(Context context) {
if (appContext == null) {
this.appContext = context.getApplicationContext();
}
}
public Context getContext() {
return appContext;
}
public static Context getGlobalContext() {
return getInstance().getContext();
}
// HashMap में डेटा डालें
public void put(String key, double value) {
dataMap.put(key, value);
}
// मान प्राप्त करें
public Double get(String key) {
return dataMap.get(key);
}
// पूरा मैप प्राप्त करें
public Map<String, Double> getMap() {
return new HashMap<>(dataMap); // कॉपी लौटाएं ताकि बाहरी संशोधन रोका जा सके
}
// मैप साफ़ करें
public void clear() {
dataMap.clear();
}
@Override
public String toString() {
return dataMap.toString();
}
}
चरण 4: MainActivity.java
package com.example.singletonhashmap;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private Button btnSave;
private SingletonHashMap singleton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSave = findViewById(R.id.btnSave);
singleton = SingletonHashMap.getInstance();
singleton.init(getApplicationContext());
btnSave.setOnClickListener(v -> {
// सिंगलटन में डेटा स्टोर करें
singleton.put("कागज", 10.0);
singleton.put("रिचार्ज", 10.0);
singleton.put("अन्य बिल", 10.0);
// टोस्ट के माध्यम से प्रदर्शित करें
Toast.makeText(this, "स्टोर किया गया: " + singleton.toString(), Toast.LENGTH_LONG).show();
});
}
}
मुख्य बिंदु
- थ्रेड-सेफ: डबल-चेक्ड लॉकिंग के साथ
volatileकीवर्ड - ग्लोबल कंटेक्स्ट: एप्लिकेशन कंटेक्स्ट स्टोर करता है ताकि मेमोरी लीक न हो
- एनकैप्सुलेशन: आंतरिक मैप की कॉपी लौटाता है ताकि बाहरी संशोधन रोका जा सके
- उपयोगिता विधियां:
put(),get(),clear(),getMap()
ऐप चलाएं
"सिंगलटन में HashMap सेव करें" बटन पर क्लिक करें। टोस्ट स्टोर किए गए मान दिखाएगा।
उपयोग के मामले: कैशिंग, सेशन डेटा, कॉन्फ़िगरेशन सेटिंग्स, या कोई भी साझा राज्य जिसे ऐप-वाइड एक्सेस की आवश्यकता होती है।