সি # তে সিঙ্গেলটন কী?


181

সিঙ্গেলটন কী এবং আমি কখন এটি ব্যবহার করব?



4
এছাড়াও, সিঙ্গেলটন ওও প্রোগ্রামিংয়ের অন্যতম বহুল ব্যবহৃত এবং আপত্তিজনক নকশার ধরণ।
কেওসপ্যান্ডিয়ন

3
@ ফ্যাবিয়ানো: কারণ এটির এমন একটি দম্পতি তৈরি করার একটি পদ্ধতি রয়েছে যা কোনও অর্থহীন নয় (আমি কীভাবে Xকথা বলতে পারি Y? কেবল Yএকটি সিঙ্গলটন বানাতে পারি !) যার ফলে পরীক্ষার / ডিবাগিং এবং প্রোগ্রামিংয়ের পদ্ধতিগত শৈলীতে অসুবিধা হয়। কখনও কখনও সিলেটলেটগুলি প্রয়োজনীয়; বেশিরভাগ সময়, না।
অ্যারোনআউট

3
এটি আমার স্ট্যান্ডার্ড ফোন সাক্ষাত্কারের একটি প্রশ্ন। সঠিক উত্তরটি: কখনই নয়।
jonnii

3
@ জনিই এটি বেশ ভাল, এটি সম্ভাব্য বিকাশকারীদের সেখানে বসের মতো অবস্থা সম্পর্কে সতর্ক করতে সহায়তা করে!
মিঃ বয়

উত্তর:


144

একটি সিঙ্গলটন এমন একটি শ্রেণি যা কেবল নিজের একটি উদাহরণ তৈরি করতে দেয় - এবং উদাহরণটিতে সহজ, সহজ অ্যাক্সেস দেয়। সিঙ্গেলন প্রাইমস সফটওয়্যার বিকাশ জুড়ে একটি নিদর্শন।

থ্রেড সুরক্ষা সম্পর্কিত কিছু ভাল পরামর্শ সহ - আপনার সর্বাধিক যা জানতে হবে তার বেশিরভাগ জুড়ে একটি সি # বাস্তবায়ন রয়েছে " সি # তে একক প্যাটার্ন বাস্তবায়ন করা "

সত্যি কথা বলতে, এটি খুব বিরল যে আপনার একটি সিঙ্গলটন বাস্তবায়ন করতে হবে - আমার মতে এটি যে বিষয়গুলির সম্পর্কে আপনার সচেতন হওয়া উচিত সেগুলির মধ্যে একটি হওয়া উচিত, এমনকি এটি প্রায়শই ব্যবহার না করা হলেও।


2
চমৎকার টিউটোরিয়াল তবে পবিত্র বাজে কথা তারা কোড ইন্ডেন্টেশনে কী করেছে
অনুপ্রেরণা

এখানে "আমি কি 2020. আদর্শ বাস্তবায়ন অর্থাৎ হতে বিবেচনা করার জন্য আর সরাসরি লিঙ্ক আছে, .NET 4 এর অলস <টি> টাইপ ব্যবহার পাশাপাশি জন্য Microsoft দস্তাবেজ-এ লিঙ্ক হিসাবে," Lazy<T> Class
চিরামিসু

52

আপনি সি # চেয়েছিলেন। তুচ্ছ উদাহরণ:


public class Singleton
{
    private Singleton()
    {
        // Prevent outside instantiation
    }

    private static readonly Singleton _singleton = new Singleton();

    public static Singleton GetSingleton()
    {
        return _singleton;
    }
}

14
থ্রেড নিরাপদ নয়। দুটি থ্রেড একই সময়ে কল করতে পারে এবং দুটি পৃথক বস্তু তৈরি করতে পারে।
আলাগেসান পালানী

5
@ আলাগাসন পালানী, সত্যিই আপনি ঠিক বলেছেন। আমি শ্রেণী-স্তর সূচনা করার নিম্ন-স্তরের বিবরণে দক্ষ নই, তবে আমি মনে করি যে আমি যে পরিবর্তনটি করেছি তা থ্রেড-নিরাপদ উদ্বেগের সমাধান করে।
ক্রিস সিমন্স

3
নিশ্চিত, আমি আপনাকে ভুল দেখাচ্ছে না। আমি থ্রেড-সুরক্ষা সম্পর্কে পাঠককে একটি ইঙ্গিত দিচ্ছি, যাতে তারা যদি এটিকে মোকাবেলা করতে হয় তবে তারা যত্নবান হন।
আলাগেসন পালানী

9
না, আপনার মন্তব্যটি গুরুত্বপূর্ণ বলে আমি মনে করি। একটি একক - এবং কেবলমাত্র একটি উদাহরণ দেওয়ার কথা বলে দেওয়া হয়েছে, এখানে রেসের শর্তটি একের অধিক সরবরাহ করার সম্ভাবনাটি খোলে। স্থির ক্ষেত্রের সূচনা সহ এখন সংস্করণটি দেখুন। আমি বিশ্বাস করি এটি থ্রেড-সুরক্ষা সমস্যাটিকে সংশোধন করে, যদি আমি ডক্স এবং এই এসও উত্তরটি সঠিকভাবে পড়ি ।
ক্রিস সিমন্স

1
@ আলগ্যাসানপালানী, আমি দেখতে পেয়েছি যে আপনি বলেছেন যে আরও বেশ কয়েকটি উত্তর থ্রেড নিরাপদ নয়। থ্রেড-নিরাপদ এমন কোনও সমাধান দেওয়ার জন্য আপনি কি যত্ন নেবেন?
Bonez024

39

এটি কী: একটি শ্রেণি যার জন্য একটি আবেদনের আজীবন জুড়ে কেবল একটি, ধ্রুবক উদাহরণ রয়েছে। একক প্যাটার্ন দেখুন ।

যখন আপনি এটি ব্যবহার করা উচিত: যতটা সম্ভব সম্ভব। শুধুমাত্র যখন আপনি একেবারে নিশ্চিত হন যে আপনার এটি প্রয়োজন। আমি "কখনই না" বলতে নারাজ, তবে সাধারণত আরও ভাল বিকল্প থাকে যেমন ডিপেন্ডেন্সি ইনজেকশন বা কেবল স্ট্যাটিক ক্লাস।


16
আমি নিশ্চিত নই যে একটি স্ট্যাটিক শ্রেণি একটি সিঙ্গলটনের চেয়ে ভাল বিকল্প ... এটি পরিস্থিতি এবং ভাষার উপর নির্ভর করে।
marggg

5
স্ট্যাটিক ক্লাসগুলি সিঙ্গলটনের মতো আচরণ করে না, একটি সিঙ্গেলটনকে প্যারামিটার হিসাবে পদ্ধতিতে পাঠানো যেতে পারে যেখানে স্ট্যাটিক শ্রেণি করতে পারে না।
ট্যাবকুল

4
মার্গগির সাথে একমত - আমি সিলেটলেটনের ভাল বিকল্প হিসাবে কোনও স্থির শ্রেণি দেখতে পাচ্ছি না, কারণ আপনার এখনও বিকল্প সরবরাহ করার সমস্যা রয়েছে, যেমন এই শ্রেণীর উপর নির্ভর করে এমন একটি উপাদান পরীক্ষার সময়। তবে আমি আরও বিভিন্ন ব্যবহার দেখতে পাচ্ছি, একটি স্ট্যাটিক শ্রেণি সাধারণত স্বাধীন ইউটিলিটি ফাংশনগুলির জন্য ব্যবহার করা হবে যা রাষ্ট্রের থেকে স্বাধীন, যেখানে সিঙ্গলটন একটি প্রকৃত শ্রেণীর উদাহরণ, এবং এটি সাধারণত একটি রাজ্য সংরক্ষণ করে। আমি পরিবর্তে ডিআই ব্যবহার করতে সম্মত হই এবং তারপরে আপনার ডিআই কনটেইনারকে বলি যে আপনি এটি কেবল class শ্রেণীর একক উদাহরণ ব্যবহার করতে চান।
পিট

9
আমি এই উত্তরটিকে অগ্রাহ্য করেছি কারণ এটি কখন ব্যবহার করবে সে সম্পর্কে আমাকে কোনও তথ্য দেয় না। "শুধুমাত্র যখন আপনার প্রয়োজন হবে" সত্যই আমাকে সিঙ্গেলনে নতুন যে কারও জন্য কোনও তথ্য দেয় না।
সেরজিও তাপিয়া

9
@ অ্যাডকিনস: ডিআই ডিপেন্ডেন্সি ইনজেকশন বলতে বোঝায় যে কোনও শ্রেণীর নির্ভরতা যখন কোনও নির্মাণকারী বা পাবলিক সম্পত্তি দ্বারা (সাধারণত) হয়ে যায়। ডিআই একা "দূরত্ব" সমস্যা সমাধান করে না, তবে এটি সাধারণত একটি ইনভার্জন-অফ-কন্ট্রোল (আইওসি) ধারক বরাবর প্রয়োগ করা হয় যা কীভাবে কোনও নির্ভরতা স্বয়ংক্রিয়ভাবে শুরু করতে পারে তা জানে। সুতরাং যদি আপনি "এক্সটি ওয়াইয়ের সাথে কীভাবে সন্ধান করতে / কথা বলবেন" জানেন না, ডিআই এবং আইওসির সংমিশ্রণটি লুজার কাপলিংয়ের সাথে একই সমস্যাটি সমাধান করতে পারে তবে সমাধান করার জন্য যদি আপনি একটি সিঙ্গেলটন তৈরি করছেন।
অ্যারোনআউট

27

সি # তে সিঙ্গেলটন প্রয়োগের আর একটি উপায়, আমি ব্যক্তিগতভাবে এইভাবে পছন্দ করি কারণ আপনি কোনও পদ্ধতির পরিবর্তে সম্পত্তি হিসাবে সিগনগন শ্রেণির উদাহরণটি অ্যাক্সেস করতে পারেন।

public class Singleton
    {
        private static Singleton instance;

        private Singleton() { }

        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                    instance = new Singleton();
                return instance;
            }
        }

        //instance methods
    }

তবে ভাল, যতদূর আমি জানি উভয় উপায়ই 'সঠিক' হিসাবে বিবেচিত তাই এটি কেবল ব্যক্তিগত স্বাদের জিনিস।


11
থ্রেড নিরাপদ নয়। দুটি থ্রেড একই সময়ে কল করতে পারে এবং দুটি পৃথক বস্তু তৈরি করতে পারে।
আলাগেসান পালানী

11
using System;
using System.Collections.Generic;
class MainApp
{
    static void Main()
    {
        LoadBalancer oldbalancer = null;
        for (int i = 0; i < 15; i++)
        {
            LoadBalancer balancerNew = LoadBalancer.GetLoadBalancer();

            if (oldbalancer == balancerNew && oldbalancer != null)
            {
                Console.WriteLine("{0} SameInstance {1}", oldbalancer.Server, balancerNew.Server);
            }
            oldbalancer = balancerNew;
        }
        Console.ReadKey();
    }
}

class LoadBalancer
{
    private static LoadBalancer _instance;
    private List<string> _servers = new List<string>();
    private Random _random = new Random();

    private static object syncLock = new object();

    private LoadBalancer()
    {
        _servers.Add("ServerI");
        _servers.Add("ServerII");
        _servers.Add("ServerIII");
        _servers.Add("ServerIV");
        _servers.Add("ServerV");
    }

    public static LoadBalancer GetLoadBalancer()
    {
        if (_instance == null)
        {
            lock (syncLock)
            {
                if (_instance == null)
                {
                    _instance = new LoadBalancer();
                }
            }
        }

        return _instance;
    }

    public string Server
    {
        get
        {
            int r = _random.Next(_servers.Count);
            return _servers[r].ToString();
        }
    }
}

আমি dofactory.com থেকে কোড নিয়েছি , তেমন অভিনব কোনও কিছুই নেই তবে আমি ফু ও বারের সাথে সি # 3.0 ডিজাইনের প্যাটার্নসে জুডিথ বিশপের কাছ থেকে বইয়ের সাথে ম্যাক ডকে সক্রিয় প্রয়োগ সম্পর্কে উদাহরণ সহকারে উদাহরণের চেয়ে আরও ভাল দেখতে পেয়েছি

আপনি যদি কোডটির দিকে লক্ষ্য করেন আমরা আসলে লুপের জন্য নতুন অবজেক্ট তৈরি করছি, যাতে নতুন অবজেক্ট তৈরি হয় তবে উদাহরণস্বরূপ পুনরায় ব্যবহার করা হয় যার ফলস্বরূপ ওল্ড ব্যালেন্সার এবং নতুন ভারসাম্যকারের একই উদাহরণ রয়েছে, কীভাবে? স্ট্যাটিক কীওয়ার্ডের কারণে এটি ফাংশন গেটলয়েডবালেন্সার () এ ব্যবহৃত হয়েছে , বিভিন্ন সার্ভারের মান থাকা যা এলোমেলো তালিকার পরেও , গেটলয়েডবালেন্সারের স্থিতিশীল () কোনও নির্দিষ্ট অবজেক্টের পরিবর্তে টাইপ নিজেই সম্পর্কিত।

অতিরিক্তভাবে এখানে ডাবল চেক লকিং আছে

if (_instance == null)
            {
                lock (syncLock)
                {
                    if (_instance == null)

এমএসডিএন থেকে

লক কীওয়ার্ডটি নিশ্চিত করে যে একটি থ্রেড কোডের সমালোচনামূলক বিভাগে প্রবেশ করবে না এবং অন্য থ্রেড সমালোচনামূলক বিভাগে রয়েছে। যদি অন্য থ্রেড কোনও লকড কোড প্রবেশ করানোর চেষ্টা করে তবে অবজেক্টটি প্রকাশ না হওয়া পর্যন্ত এটি অপেক্ষা করবে, অবরুদ্ধ করবে।

সুতরাং প্রতিবারের পারস্পরিক-বাদ দেওয়ার লকটি জারি করা হয়, এমনকি এটির প্রয়োজন না থাকলেও যা অপ্রয়োজনীয় তাই আমাদের নাল চেক করা উচিত।

আশা করি এটি আরও পরিষ্কার করতে সহায়তা করে।

এবং দয়া করে মন্তব্য করুন যদি আমার বোঝাপড়াটি ভুল উপায়ে পরিচালিত করে।


6

একটি সিঙ্গলটন (এবং এটি সি # এর সাথে আবদ্ধ নয়, এটি একটি ওও ডিজাইনের ধরণ) তখন আপনি যখন আপনার অ্যাপ্লিকেশন জুড়ে কেবলমাত্র একটি ক্লাসের উদাহরণ তৈরি করতে চান। ব্যবহারগুলিতে সাধারণত বৈশ্বিক সংস্থান অন্তর্ভুক্ত থাকে, যদিও আমি ব্যক্তিগত অভিজ্ঞতা থেকে বলব, এগুলি প্রায়শই দুর্দান্ত ব্যথার উত্স।


5

সেখানে কেবলমাত্র সিঙ্গলটনের এক উদাহরণ হতে পারে, এটি স্থির শ্রেণীর মতো নয়। একটি স্ট্যাটিক শ্রেণিতে কেবল স্থিতিশীল পদ্ধতি থাকতে পারে এবং তা কখনই তাত্ক্ষণিকভাবে চলতে পারে না, তবে সিঙ্গলটনের উদাহরণটি অন্য যে কোনও অবজেক্টের মতো একইভাবে ব্যবহৃত হতে পারে।


2

এটি একটি ডিজাইনের ধরণ এবং এটি সি # তে নির্দিষ্ট নয়। পুরো উইকিপিডিয়া নিবন্ধের মতো পুরো ইন্টারনেট এবং এসও সম্পর্কে এটি সম্পর্কে আরও ।

সফটওয়্যার ইঞ্জিনিয়ারিংয়ে, সিঙ্গলটন প্যাটার্ন হ'ল একটি নকশার প্যাটার্ন যা কোনও শ্রেণীর ইনস্ট্যান্টেশনকে একটি বস্তুর মধ্যে সীমাবদ্ধ করতে ব্যবহৃত হয়। সিস্টেমের ক্রিয়াকলাপের সমন্বয় করার জন্য ঠিক যখন কোনও বস্তুর প্রয়োজন হয় তখন এটি কার্যকর হয়। ধারণাটি কখনও কখনও এমন সিস্টেমে সাধারণীকরণ করা হয় যেগুলি কেবলমাত্র একটি বস্তুর উপস্থিতিতে আরও কার্যকরভাবে পরিচালিত হয় বা এটি নির্দিষ্ট সংখ্যক অবজেক্টগুলিতে ইনস্ট্যান্টেশনকে সীমাবদ্ধ করে (যেমন, পাঁচটি)। কেউ কেউ এটিকে নিদর্শনবিরোধী বলে বিবেচনা করে, এটি অতিরিক্ত ব্যবহার করা হয়েছে এমন সিদ্ধান্ত নিয়ে, এমন পরিস্থিতিতে অপ্রয়োজনীয় সীমাবদ্ধতার পরিচয় দেয় যেখানে শ্রেণীর একমাত্র উদাহরণ প্রয়োজন হয় না, এবং বিশ্বব্যাপী রাষ্ট্রকে একটি প্রয়োগের সাথে পরিচয় করে।

আপনি যদি এমন কোনও ক্লাস চান যা এটি কেবল একবার ইনস্ট্যান্ট করা যায়।


2

আমি এটি দেখার জন্য ডেটা ব্যবহার করি। ডিবি থেকে একবার লোড করুন।

public sealed class APILookup
    {
        private static readonly APILookup _instance = new APILookup();
        private Dictionary<string, int> _lookup;

        private APILookup()
        {
            try
            {
                _lookup = Utility.GetLookup();
            }
            catch { }
        }

        static APILookup()
        {            
        }

        public static APILookup Instance
        {
            get
            {
                return _instance;
            }
        }
        public Dictionary<string, int> GetLookup()
        {
            return _lookup;
        }

    }

2

সিঙ্গেলটন কী:
এটি এমন একটি শ্রেণি যা কেবল নিজের একটি উদাহরণ তৈরি করতে দেয় এবং সাধারণত সেই দৃষ্টিতে সাধারণ অ্যাক্সেস দেয়।

আপনার কখন ব্যবহার করা উচিত:
এটি পরিস্থিতির উপর নির্ভর করে।

দ্রষ্টব্য: দয়া করে ডিবি সংযোগে ব্যবহার করবেন না, বিস্তারিত উত্তরের জন্য দয়া করে উল্লেখ করুন @Chad গ্রান্ট এর উত্তর

এখানে একটি এর একটি সাধারণ উদাহরণ Singleton:

public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();

    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    static Singleton()
    {
    }

    private Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }
}

আপনি এটি Lazy<T>তৈরি করতেও ব্যবহার করতে পারেন Singleton

আরও বিশদ উদাহরণ ব্যবহার করে এখানে দেখুনLazy<T>


1

এখানে সিঙ্গেলটনটি কী: http://en.wikedia.org/wiki/Singleton_ Pattern

আমি সি # জানি না, তবে এটি আসলে সমস্ত ভাষায় একই জিনিস, কেবল বাস্তবায়ন আলাদা।

এটি সম্ভব হলে সাধারণত সিঙ্গলটন এড়ানো উচিত তবে কিছু পরিস্থিতিতে এটি খুব সুবিধাজনক।

আমার ইংরেজীর জন্য দুঃখিত ;)


আপনার ইংরাজী ঠিক আছে :)
ফ্রেনকিবি

1

পুরো অ্যাপ্লিকেশন ডোমেনের জন্য একক উদাহরণ তৈরি করতে সিঙ্গলটন ক্লাস ব্যবহার করা হয়।

public class Singleton
{
    private static Singleton singletonInstance = CreateSingleton();

    private Singleton()
    {
    }

    private static Singleton CreateSingleton()
    {
        if (singletonInstance == null)
        {
            singletonInstance = new Singleton();
        }

        return singletonInstance;
    }

    public static Singleton Instance
    {
        get { return singletonInstance; }            
    }
}

ইন এই নিবন্ধটি এটা বর্ণনা করা হয়েছে কিভাবে আমরা কেবলমাত্র পরিবর্তনশীল এবং অ্যাপ্লিকেশন তাদের ব্যবহারিক প্রয়োগের ব্যবহার থ্রেড নিরাপদ Singleton বর্গ তৈরি করতে পারেন।


1

আমি জানি প্রশ্নের উত্তর দিতে খুব দেরী হয়েছে তবে অটো-প্রপার্টি দিয়ে আপনি এরকম কিছু করতে পারেন:

public static Singleton Instance { get; } = new Singleton();

আপনি কোথায় Singletonশ্রেণিবদ্ধ এবং এর মাধ্যমে হতে পারবেন, এক্ষেত্রে কেবলমাত্র পঠনযোগ্য সম্পত্তি Instance


0

EX আপনি বিশ্বব্যাপী তথ্যের জন্য সিঙ্গেলটন ব্যবহার করতে পারেন যা ইনজেকশনের প্রয়োজন।

আমার ক্ষেত্রে, আমি গ্লোবাল স্ট্যাটিক ক্লাসে লগড ব্যবহারকারীর বিবরণ (ব্যবহারকারীর নাম, অনুমতি ইত্যাদি) রাখছিলাম। এবং যখন আমি ইউনিট পরীক্ষাটি প্রয়োগ করার চেষ্টা করেছি, তখন কন্ট্রোলার ক্লাসগুলিতে নির্ভরতা ইনজেকশন করার কোনও উপায় ছিল না। এইভাবে আমি আমার স্ট্যাটিক ক্লাসটি সিঙ্গলটন প্যাটার্নে পরিবর্তন করেছি।

public class SysManager
{
    private static readonly SysManager_instance = new SysManager();

    static SysManager() {}

    private SysManager(){}

    public static SysManager Instance
    {
        get {return _instance;}
    }
}

http://csharpindepth.com/Articles/General/Singleton.aspx#cctor


0

আমাদের সি # তে সিঙ্গলটন ডিজাইন প্যাটার্নটি ব্যবহার করা উচিত যখন আমাদের নিশ্চিত করা দরকার যে নির্দিষ্ট শ্রেণীর কেবলমাত্র একটি উদাহরণ তৈরি হচ্ছে এবং তারপরে পুরো প্রয়োগের জন্য সেই দৃষ্টিতে সাধারণ বৈশ্বিক অ্যাক্সেস সরবরাহ করতে হবে।

রিয়েল-টাইম দৃশ্যাবলী যেখানে আপনি সিঙ্গলটন ডিজাইনের প্যাটার্নটি ব্যবহার করতে পারেন: পরিষেবা প্রক্সি: যেমন আমরা জানি যে কোনও সার্ভিস এপিআই আবেদন করা একটি অ্যাপ্লিকেশনটির একটি বিস্তৃত ক্রিয়াকলাপ। প্রক্রিয়াটি যে বেশিরভাগ সময় নেয় সেবার পরিষেবা API শুরু করার জন্য পরিষেবা ক্লায়েন্ট তৈরি করা হয়। আপনি যদি সিঙ্গেলটন হিসাবে পরিষেবা প্রক্সি তৈরি করেন তবে এটি আপনার অ্যাপ্লিকেশনটির কার্যকারিতা উন্নত করবে।

মুখোমুখি: আপনি একক হিসাবে ডেটাবেস সংযোগ তৈরি করতে পারেন যা অ্যাপ্লিকেশনটির কার্যকারিতা উন্নত করতে পারে।

লগস: একটি অ্যাপ্লিকেশনটিতে, কোনও ফাইলে আই / ও অপারেশন করা একটি ব্যয়বহুল ক্রিয়াকলাপ। আপনি যদি সিঙ্গলটন হিসাবে আপনাকে লগার তৈরি করেন তবে এটি আই / ও ক্রিয়াকলাপের কার্যকারিতা উন্নত করবে।

ডেটা ভাগ করা: আপনার যদি কোনও ধ্রুবক মান বা কনফিগারেশন মান থাকে তবে আপনি এই মানগুলি সিঙ্গলটনে রাখতে পারেন যাতে অ্যাপ্লিকেশনের অন্যান্য উপাদানগুলি সেগুলি পড়তে পারে।

ক্যাচিং: আমরা যেমন জানি যে একটি ডাটাবেস থেকে ডেটা আনা একটি সময় সাপেক্ষ প্রক্রিয়া। আপনার অ্যাপ্লিকেশনটিতে, আপনি মেমরিতে মাস্টার এবং কনফিগারেশনকে ক্যাশে করতে পারেন যা ডিবি কলগুলি এড়াতে পারে। এই পরিস্থিতিতে, সিঙ্গলটন ক্লাসটি দক্ষ পদ্ধতিতে থ্রেড সিঙ্ক্রোনাইজেশন সহ ক্যাচিং পরিচালনা করতে ব্যবহার করা যেতে পারে যা অ্যাপ্লিকেশনটির কর্মক্ষমতা তাত্পর্যপূর্ণভাবে উন্নত করে।

সি # তে সিঙ্গেলন ডিজাইন প্যাটার্নের অসুবিধাগুলি সি # তে সিঙ্গেলটন ডিজাইন প্যাটার্নটি ব্যবহারের অসুবিধাগুলি নিম্নরূপ:

ইউনিট পরীক্ষা করা খুব কঠিন কারণ এটি একটি গ্লোবাল স্টেটকে একটি অ্যাপ্লিকেশনটির সাথে পরিচয় করে। এটি একটি প্রোগ্রামের মধ্যে সমান্তরালতার সম্ভাবনা হ্রাস করে কারণ একাধিক-থ্রেড পরিবেশে সিঙ্গলটন উদাহরণটি অ্যাক্সেস করতে আপনাকে লকিং ব্যবহার করে অবজেক্টটি সিরিয়ালাইজ করতে হবে।

আমি নিম্নলিখিত নিবন্ধ থেকে এটি নিয়েছি।

https://dotnettutorials.net/lesson/singleton-design-pattern/


0

লক ব্যবহার না করে নিরাপদ সিঙ্গলটন থ্রেড করুন এবং কোনও অলস তাত্পর্য নেই le

এই বাস্তবায়নের একটি স্থির নির্মাতা রয়েছে, সুতরাং এটি অ্যাপ্লিকেশন ডোমেন প্রতি একবারই কার্যকর করে।

public sealed class Singleton
{

    static Singleton(){}

    private Singleton(){}

    public static Singleton Instance { get; } = new Singleton();

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.