جاوا میں ، سنگلٹن کلاس ایک کلاس ہے جس کے ایک مقررہ وقت میں صرف ایک ہی مثال ہوسکتی ہے۔ یہ جاوا میں تخلیقی ڈیزائن کے پانچ نمونوں میں سے ایک ہے جو آسانی سے ترقی میں مدد کرتا ہے . اس مضمون کے ذریعہ ، میں آپ کو جاوا میں سنگلٹن کلاس کیا ہے اور آپ اسے کیسے تخلیق کرسکتے ہیں اس کے بارے میں واضح بصیرت دوں گا۔
ذیل میں جن عنوانات کو میں اس مضمون میں شامل کروں گا:
آو شروع کریں.
جاوا میں سنگلٹن کلاس کیا ہے؟
عام آدمی کے لحاظ سے ، جاوا میں ایک سنگلٹن کلاس ہے جو ایک وقت میں کسی ایک مثال کے ذریعے اس تک رسائی حاصل کرنے کی اجازت دیتی ہے۔ یہ ڈیزائن نمونہ کسی طبقے کے غیر ضروری انسداد کو محدود کرنے اور صرف اس ایک کو یقینی بنانے کے لئے ہے JVM مثال کے طور پر کسی بھی وقت موجود ہے۔ اس طرح ، اس طرز کے ساتھ ، کسی بھی طبقے کی جو سنگلٹن کے طور پر بیان کی گئی ہے اس کی صرف ایک ہی مثال ہوتی ہےجس تک عالمی سطح تک رسائی حاصل ہے۔ عام کلاسوں کے برعکس ، ایپلیکیشنز لائف سائیکل کے اختتام پر سنگلٹن کلاس ختم نہیں ہوتا ہے۔
لیکن ہمیں کیوں پہلے جگہ سنگلٹن کلاس کی ضرورت ہے؟
ٹھیک ہے ، مثال کے طور پر کسی کلاس کی تخلیق کو محدود کرتے ہوئے اس سے میموری کی بچت ہوتی ہے کیونکہ اب جب بھی ہر بار کوئی نئی درخواست کی جائے گی تو اعتراض پیدا نہیں ہوگا۔ اس کے بجائے ، ایک ہی شے کو بار بار استعمال کیا جائے گا۔ یہی وجہ ہے کہ جاوا میں سنگلٹن کا نمونہ زیادہ تر استعمال ہوتا ہے اور ڈیٹا بیس کی ایپلی کیشنز۔ یہ بنیادی طور پر لاگنگ ، کیچنگ ، تھریڈ پولنگ ، کنفیگریشن سیٹنگس اور بہت زیادہ کے لئے استعمال ہوتا ہے.
مجھے امید ہے کہ آپ جاوا میں سنگلٹن کلاس کے تصور سے صاف ہیں۔ تو ، اب اس میں مزید آگے بڑھنے دوجاوا مضمون میں سنگلٹن کلاس اور دیکھیں کہ ان کی تخلیق کیسے ہوتی ہے۔
جاوا سنگلٹن کلاس ڈیزائن کرنے کے طریقے
جاوا میں کلاس سنگلٹن بنانے کے لئے ، آپ کو درج ذیل تین چیزوں کی ضرورت ہے۔
- کلاس کا مستحکم رکن
- نجی تعمیر کنندہ
- جامد فیکٹری کا طریقہ
چونکہ جاوا ڈویلپرز کو اپنے افق کو تلاش کرنے دیتا ہے ، لہذا وہ موجود ہیںمتعدد طریقوں سے جہاں آپ سنگلٹن کلاس ڈیزائن کرسکتے ہیں۔ ذیل میں میں نے سب سے مشہور لوگوں کو درج کیا ہے۔
- شوقین ابتدائی طریقہ
- سست ابتدا کا طریقہ
- تھریڈ سیف سنگلٹن کا طریقہ
- ڈبل لاک طریقہ کے ساتھ سست ابتدا
- سست بوجھ کا طریقہ
- جامد بلاک ابتدائی طریقہ
آئیے اب ان میں سے ہر ایک کو ایک ایک کرکے دیکھنے میں گہرائی میں ڈوبتے ہیں۔
1. شوقین ابتدائی طریقہ
سنگلٹن کلاس بنانے کا یہ سب سے آسان طریقہ ہے جہاں کلاس لوڈنگ کے وقت مثال پیدا ہوتی ہے۔ اس طریقہ کا استعمال کرتے ہوئے سنگلٹن کلاس بنانے کے ل you ، آپ کو مندرجہ ذیل اقدامات پر عمل کرنے کی ضرورت ہے۔
Def __init __ (خود):
- کنسٹرکٹر کو نجی قرار دیں۔
- اگلا مرحلہ اس سنگلٹن کلاس کے لئے نجی کلاس ممبر بنانا ہے۔
- اب ، آپ کو ایک فیکٹری کا طریقہ بیان کرنے کی ضرورت ہے جو آپ کی کلاس کا مقصد واپس کرنے کے لئے استعمال ہوگا ، جو ہم نے کلاس ممبر کی مثال کے طور پر تشکیل دیا ہے۔
- یہاں تک کہ اگر آپ اس مستحکم مثال تک براہ راست رسائی حاصل کرنا چاہتے ہیں تو آپ مستحکم ممبر کو عوامی اعلان بھی کرسکتے ہیں۔
اب ، آئیے ان پر عمل درآمد کرنے کا طریقہ دیکھیں۔
// ایجر انیشلائزیشن پبلک کلاس ایجرسنگلیٹن {نجی جامد فائنل ایجرسنگلیٹن INSTANCE = نیا ایجرسلیٹن () نجی ایجرسنگلیٹن ()} stat عوامی جامد ایجرسنگلیٹن getInstance () ST INSTANCE} {
اگر آپ کوڈ دیکھتے ہیں تو ، آپ مشاہدہ کر سکتے ہیں کہ ہر بار جب ہم کسی شے کو انسٹیٹیوٹ کر رہے ہیں تو ہم اس کا استعمال کر رہے ہیںgetInstance ()طبقے کو طلب کرنے کے بجائے طریقہ کار بلڈر .لیکن اس کے اپنے نقصانات ہیں۔ اگر آپ کلاس سنگلٹن بنانے کے لئے یہ طریقہ استعمال کرتے ہیں ، تو پھر اس حقیقت سے قطع نظر ایک مثال تیار کی جائے گی چاہے ایپلی کیشن اسے استعمال کررہی ہے یا نہیں۔
تو ، آئیے آگے بڑھیں اور جاوا میں سنگلٹن کلاس بنانے کا ایک اور طریقہ دیکھیں۔
2. سست ابتدا کا طریقہ
اس طریقے کو سست ابتداء کہا جاتا ہے کیونکہ یہ طبقاتی مثال کے تخلیق کو اس کے پہلے استعمال تک ملتوی کردیتا ہے۔ میرا مطلب یہ ہے کہ ، اس طریقے سے ، کسی شے کی تخلیق اسی صورت میں کی جاتی ہے جب اس کی ضرورت ہو۔ یہ غیر ضروری تخلیق سے بچنے میں مدد کرتا ہے . اس طرح سنگلٹن کلاس ڈیزائن کرنے کے ل To ، آپ کو مندرجہ ذیل درج ذیل مراحل پر عمل کرنے کی ضرورت ہے۔
- سب سے پہلے ، کنسٹرکٹر کو نجی قرار دیں۔
- تب آپ کو اس طبقے کے لئے نجی جامد مثال تیار کرنے کی ضرورت ہے لیکن ابھی اسے تیز کرنے کی ضرورت نہیں ہے۔
- آخر میں ، ایک فیکٹری کا طریقہ تشکیل دیں جو پہلے معلوم کرے کہ مثال کے ممبر کالعدم ہیں یا نہیں۔ اگر نہیں تو پھر یہ آپ کے لئے سنگلٹن کلاس کی مثال پیدا کرے گا اور اسے واپس کردے گا۔
ذیل میں کوڈ دکھاتا ہے کہ اس کو کیسے انجام دیا جائے.
// سست ابتداء عوامی کلاس LazySingleton {نجی جامد LazySingleton INSTANCE = null نجی LazySingleton ()}} عوامی جامد LazySingleton getInstance () {if (INSTANCE == null) nch syncronised (LazySingleton.class) INSTANCE return return واپس
3. تھریڈ سیف سنگلٹن طریقہ
لیکن مذکورہ بالا نقطہ نظر ہم وقتی حالات میں کچھ خدشات پیدا کرسکتا ہے۔ چونکہ سنگلٹن پیٹرن بنیادی طور پر ملٹی تھریڈز کے ساتھ استعمال ہوتا ہے اور اگرایک ساتھ ایک سے زیادہ تھریڈز اگر حالت میں داخل ہوتے ہیں تو یہ مسائل کو اٹھا سکتا ہے۔ اس سے بچنے کے ل we ہم عالمی سطح پر رسائی کے طریقہ کار کو ہم آہنگی بناتے ہوئے تھریڈ سیف سنگلٹن کلاس بنانے کی کوشش کرتے ہیں۔ یہ یقینی بناتا ہے کہ وقت میں کسی بھی وقت صرف ایک ہی دھاگہ اس طریقہ کار پر عمل پیرا ہے۔ عمل درآمد دیکھنے کے لئے ذیل کے کوڈ کا حوالہ دیں:
// تھریڈ سیف سنگلٹن پبلک کلاس تھریڈ سیف سنگلٹن {نجی جامد تھریڈ سیفس سنگلٹن انسٹی ٹینس نجی تھریڈ سیف سیگلٹن ()} stat پبلک جامد مطابقت پذیر تھریڈ سیفسنگلیٹن getInstance () {if (INSTANCE == null) ST INSTANCE new Th INSTANCE =
لیکن بعض اوقات یہ طریقہ کار ہر وقت کے طریقہ کار کی طرح بہت بوجھل بھی ہوسکتا ہےدرخواست کی گئی ہے اس سے پہلے کہ یہ طریقہ استعمال ہوسکے اس سے پہلے تالا جاری ہوجائے۔ اس کے نتیجے میں عمل سست ہوجاتا ہے اور ہمیں اگلے نقطہ نظر کی طرف لے جاتا ہے جو ہےڈبل لاک کے ساتھ سست ابتدا۔
4. ڈبل لاک کے ساتھ سست ابتدا طریقہ
اس نقطہ نظر میں ، ہم طریقوں کو ہم وقت ساز نہیں کرتے ہیں۔ بلکہ ہم مطابقت پذیر بلاک میں موجود آبجیکٹ کوڈ کو لفافہ کرتے ہیں۔آپ یہ کہہ سکتے ہیں کہ تھریڈ لاکس کو پہلے سے چیک کرکے ، یہلاک کے حصول کی تعداد کو کم کرتا ہے۔ اس نقطہ نظر کے نتیجے میں عام طور پر درخواست کی کارکردگی میں اضافہ ہوتا ہے۔ یہ دیکھنے کے لئے ذیل کے کوڈ کو دیکھیں.
// ڈبل لاک پبلک کلاس کے ساتھ سست ابتداء LazyDoubleLockSingleton {نجی جامد LazyDoubleLockSingleton INSTANCE = null نجی LazyDoubleLockSingleton ()}} پبلک جامد LazyDoubleLockSingleton getInstance () INSTCEL (INSTCEL) منسوخ کریں {INSTANCE = نیا LazyDoubleLockSingleton ()}} ST INSTANCE واپس}
5. سست بوجھ کا طریقہ
یہ طریقہ جے ایس ایل (جاوا زبان کی تفصیلات) پر مبنی ہے اور اسی کے مطابق جامد ڈیٹا ممبروں کو صرف اس وقت لوڈ کریں گے جب انہیں ضرورت ہو۔ اس طرح جب آپ کے سنگلٹن کلاس کو جے وی ایم میں لادا جاتا ہے تو ، کوئی مثال پیدا نہیں ہوتی ہے۔ مزید برآں ، اس پروگرام کے نفاذ کے دوران ، عالمی طریقہ ترتیب وار ترتیب دیا گیا ہے۔ اس طریقہ کار کی مدد سے ، آپ کو لوڈ کرنے اور شروع کرنے کے لئے واضح طور پر جامد گیٹ انسٹینس () کو ہم آہنگی کرنے کی ضرورت نہیں ہے۔ جامد طبقے کے ممبر کو مناسب ترتیب کے ساتھ طلب کیا جائے گا ، عالمی طریقہ کار کے باقی ہم آہنگی درخواستوں کو ہم آہنگی کے اوور ہیڈ کو انجام دینے کے بغیر اسی ترتیب میں واپس کردیا جاتا ہے۔
ذیل میں ایک ہی کارکردگی کا مظاہرہ کرنے کے لئے کوڈ ہے۔
// آلسی لوڈ کا طریقہ عوامی کلاس LazyLoadSingleton {نجی LazyLoadSingleton ()}} نجی جامد کلاس سنگلٹن کلاس ہولڈر {جامد فائنل وار INSTANCE = نیا LazyLoadSingleton ()} پبلک جامد LazyLoadSingleton HAstance lassAntance
6. جامد بلاک شروع کرنے کا طریقہ
جاوا میں سنگلٹن کلاس بنانے کا یہ طریقہ ہےبے تاب ابتدا کے طریقہ کار کی طرح۔ فرق صرف اتنا ہے کہ اس کلاس کی مثال جامد بلاک کے اندر پیدا کی گئی ہے فعالیت
// جامد بلاک انوائسلائزیشن پبلک کلاس اسٹیٹک بلوک سنگلٹن stat پرائیویٹ جامد اسٹیٹک بلاک سنگلٹن انسٹیٹیوٹ نجی اسٹیٹک بلاک سنگلٹن () {} // مستثنیٰ بلاک جامد میں استثناء {INSTANCE = new StaticBlockSingleton ()} کیچ (استثناء) {پھینک دیں نیا رن ٹائم ایکسینسیشن سنگلٹن کلاس بنانے کے دوران)) stat stat عوامی جامد جامد اسٹیٹک بلاک سنگلٹن getInstance () ST INSTANCE واپس}
یہ ہمارے پاس جاوا میں سنگلٹن کلاس پر اس مضمون کے اختتام تک پہنچا ہے۔ اگر آپ جاوا کے بارے میں مزید جاننا چاہتے ہیں تو آپ ہمارے حوالہ دے سکتے ہیں .
اب جب آپ سمجھ گئے ہیں کہ جاوا میں سنگلٹن کلاس کیا ہے ، اس کی جانچ پڑتال کریں ایڈوریکا کے ذریعہ ، ایک قابل اعتماد آن لائن سیکھنے والی کمپنی جس کی دنیا بھر میں 250،000 سے زیادہ مطمئن سیکھنے والوں کے نیٹ ورک ہیں۔ ایڈورکا کا جاوا J2EE اور SOA ٹریننگ اور سرٹیفیکیشن کورس طلباء اور پیشہ ور افراد کے لئے ڈیزائن کیا گیا ہے جو جاوا ڈویلپر بننا چاہتے ہیں۔ کورس آپ کو جاوا پروگرامنگ میں آغاز فراہم کرنے اور ہائبرنیٹ اور اسپرنگ جیسے جاوا کے مختلف فریم ورکوں کے ساتھ ساتھ جاوا کے دونوں بنیادی خیالات کے ساتھ تربیت دینے کے لئے ڈیزائن کیا گیا ہے۔
ہمارے لئے ایک سوال ہے؟ برائے کرم اس 'جاوا میں سنگلٹن کلاس' مضمون کے تبصرے سیکشن میں اس کا تذکرہ کریں اور ہم جلد از جلد آپ کے پاس واپس آجائیں گے۔