Singleton Design Pattern Example: Singleton Class তৈরি এবং ব্যবহার

Java Design Patterns Examples - জাভা উদাহরন (Java  Examples) - Java Technologies

329

Singleton Design Pattern একটি সৃজনশীল ডিজাইন প্যাটার্ন যা নিশ্চিত করে যে একটি ক্লাসের কেবলমাত্র একটি ইনস্ট্যান্স থাকবে এবং সেই ইনস্ট্যান্সটি অ্যাক্সেস করার জন্য একটি গেটার মেথড থাকবে। এটি সাধারণত ব্যবহৃত হয় যখন কোনো রিসোর্স বা ডেটা শেয়ার করতে হবে যা একাধিক থ্রেড বা অ্যাপ্লিকেশন অংশের মধ্যে শেয়ার করা হয়।

Singleton Pattern এর প্রধান বৈশিষ্ট্য:

  1. একটি একক ইনস্ট্যান্স: একটি ক্লাসের কেবলমাত্র এক ইনস্ট্যান্স তৈরি হবে।
  2. গেটার মেথড: সেই একক ইনস্ট্যান্সটি অ্যাক্সেস করার জন্য একটি গেটার মেথড থাকবে।
  3. Lazy Initialization: ইনস্ট্যান্সটি তখনই তৈরি হবে যখন প্রথমবার তার প্রয়োজন হবে।

Singleton Design Pattern উদাহরণ

এখানে আমরা একটি Singleton Class তৈরি করব যা একটি কেবল একক ইনস্ট্যান্স প্রদান করবে এবং সেটি ব্যবহার করবে।

Singleton Class উদাহরণ (Thread-Safe Version)

public class Singleton {

    // Singleton ক্লাসের একমাত্র ইনস্ট্যান্স
    private static Singleton instance;

    // কনস্ট্রাক্টরকে প্রাইভেট করা হয়েছে যাতে বাইরের কোড এটি ইনস্ট্যান্স করতে না পারে
    private Singleton() {
        // কিছু Initialization কোড
    }

    // গেটার মেথড যা ক্লাসের একমাত্র ইনস্ট্যান্স প্রদান করে
    public static Singleton getInstance() {
        // ইনস্ট্যান্স তৈরি করা হবে যদি এটি null থাকে
        if (instance == null) {
            // Synchronization ব্লক ব্যবহার করা হয়েছে যাতে থ্রেড সেফ থাকে
            synchronized (Singleton.class) {
                // আবার চেক করা হবে যাতে একাধিক থ্রেড একই সময় ইনস্ট্যান্স তৈরি না করে
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

    // Singleton ক্লাসের কিছু ফাংশন
    public void showMessage() {
        System.out.println("Hello from Singleton!");
    }
}

public class SingletonPatternTest {
    public static void main(String[] args) {
        // Singleton ইনস্ট্যান্স অ্যাক্সেস করা
        Singleton singleton = Singleton.getInstance();
        singleton.showMessage();  // "Hello from Singleton!" মেসেজ প্রদর্শন

        // একই ইনস্ট্যান্স পুনরায় ব্যবহার
        Singleton anotherSingleton = Singleton.getInstance();
        anotherSingleton.showMessage();
        
        // নিশ্চিত করা যে দুটি রেফারেন্স একই ইনস্ট্যান্স পয়েন্ট করছে
        System.out.println(singleton == anotherSingleton);  // true
    }
}

কোডের ব্যাখ্যা:

  1. Private Constructor:
    • Singleton ক্লাসের কনস্ট্রাক্টরকে private করা হয়েছে, যাতে বাইরের কোড এ ক্লাসটির ইনস্ট্যান্স তৈরি না করতে পারে। এটি Singleton প্যাটার্নের একটি মূল বৈশিষ্ট্য।
  2. Static Instance Variable:
    • private static Singleton instance; এই স্ট্যাটিক ভেরিয়েবলটি ক্লাসের একমাত্র ইনস্ট্যান্স হিসেবে কাজ করবে। প্রথমবার যখন getInstance() মেথডটি কল করা হবে, তখন ইনস্ট্যান্স তৈরি হবে।
  3. getInstance() Method:
    • এই মেথডটি Singleton ক্লাসের একমাত্র ইনস্ট্যান্স প্রদান করে। এটি প্রথমবার কল হলে ইনস্ট্যান্স তৈরি হবে।
    • synchronized ব্লক ব্যবহার করা হয়েছে যাতে এটি থ্রেড সেফ হয়, অর্থাৎ একাধিক থ্রেড একই সময়ে একে তৈরি করতে না পারে। তবে, এখানে দুইটি if চেক করা হয়েছে যাতে একাধিক থ্রেড প্রথমে ইনস্ট্যান্স তৈরি করতে চেষ্টা করলে তা প্রতিরোধ করা যায়।
  4. showMessage() Method:
    • showMessage() একটি সাধারণ মেথড যা এই Singleton ক্লাসের একটি ফাংশনালিটি প্রদর্শন করে।
  5. Testing the Singleton:
    • SingletonPatternTest ক্লাসের মধ্যে, getInstance() মেথড ব্যবহার করে Singleton ক্লাসের ইনস্ট্যান্স এক্সেস করা হয়। আমরা দুটি আলাদা ভেরিয়েবল দিয়ে একই ইনস্ট্যান্স এক্সেস করেছি এবং তাদের সমতা যাচাই করেছি। এই চেকের ফলস্বরূপ true হবে, যা নিশ্চিত করে যে এই দুটি ভেরিয়েবল একই ইনস্ট্যান্স পয়েন্ট করছে।

Thread Safety এবং Double-Checked Locking:

  • Double-Checked Locking: একটি থ্রেড সেফ Singleton ক্লাস তৈরি করতে আমরা প্রথমে instance ভেরিয়েবলটি চেক করি যদি এটি null না হয়, তারপর synchronized ব্লক ব্যবহার করি যাতে একাধিক থ্রেড একই সময় ইনস্ট্যান্স তৈরি করতে না পারে।

Advantages of Singleton Pattern:

  1. Controlled Access to Single Instance: এই প্যাটার্নটি একক ইনস্ট্যান্সের মাধ্যমে রিসোর্স অ্যাক্সেস নিয়ন্ত্রণ করে।
  2. Global Access Point: এটি গ্লোবাল অ্যাক্সেস পয়েন্ট প্রদান করে, যাতে বিশ্বের যেকোনো জায়গা থেকে একক ইনস্ট্যান্সটি সহজে অ্যাক্সেস করা যায়।
  3. Lazy Initialization: ইনস্ট্যান্সটি শুধুমাত্র প্রয়োজনের সময় তৈরি হবে, এতে অ্যাপ্লিকেশনের কর্মক্ষমতা বাড়ে।

এই উদাহরণটি দেখায় কিভাবে Singleton Design Pattern বাস্তবায়িত করা যায়। Singleton প্যাটার্নের মাধ্যমে আপনি নিশ্চিত করতে পারেন যে একটি ক্লাসের শুধুমাত্র এক ইনস্ট্যান্স থাকবে, যা অন্যান্য অংশের মধ্যে শেয়ার করা যাবে।

Content added By
Promotion

Are you sure to start over?

Loading...