JavaRush /جاوا بلاگ /Random-UR /پیٹرنز اور سنگلٹن - ہر اس شخص کے لیے جس نے پہلی بار ان کا...

پیٹرنز اور سنگلٹن - ہر اس شخص کے لیے جس نے پہلی بار ان کا سامنا کیا۔

گروپ میں شائع ہوا۔
اس مضمون کا مقصد ان لوگوں کے لیے ہے جنہوں نے پہلے پیٹرن کے تصور کا سامنا کیا، Singleton'e' کے بارے میں سنا، یا کسی طرح اسے بنایا، لیکن پھر بھی کچھ سمجھ نہیں پایا۔ خوش آمدید! JavaRush کے طلبا کو پہلی بار پیٹرن کا سامنا سطح 15 پر ہوتا ہے، جب غیر متوقع طور پر کیپ Singletonایک سست عمل کے ساتھ پیٹرن کو "ٹھیک" کرنے اور لاگو کرنے کو کہتی ہے۔ جو طلباء پہلی بار اس کے بارے میں سنتے ہیں ان کے Singletonپاس فوری طور پر سوالات کا ایک گروپ ہوتا ہے: پیٹرن کیا ہے، اس کی ضرورت کیوں ہے، یہ کس قسم کا پیٹرن ہے، Singletonاور آخر میں، یہ کس قسم کا سست عمل ہے۔ آئیے ترتیب سے جواب دینا شروع کرتے ہیں: پیٹرنز اور سنگلٹن - ہر اس شخص کے لیے جس نے پہلی بار ان کا سامنا کیا - 1

ویسے بھی پیٹرن کیا ہے؟

بہتر تفہیم کے لیے، میرے خیال میں تاریخ سے اس سوال کا جواب دینا ضروری ہے۔ پروگرامرز میں ایسے چار مشہور مصنفین ہیں: ایرچ گاما، رچرڈ ہیلم، رالف جانسن اور جان ولسائیڈز، جو ایک دلچسپ خیال لے کر آئے تھے۔
پیٹرنز اور سنگلٹن - ہر اس شخص کے لیے جس نے پہلی بار ان کا سامنا کیا - 2
انہوں نے دیکھا کہ پروگرام لکھتے وقت انہیں اکثر تقریباً ایک جیسے مسائل کو حل کرنا پڑتا تھا اور ساخت میں ایک ہی قسم کا کوڈ لکھنا پڑتا تھا۔ لہذا، انہوں نے پیٹرن مخصوص پیٹرن کی شکل میں بیان کرنے کا فیصلہ کیا جو اکثر آبجیکٹ پر مبنی پروگرامنگ میں استعمال ہوتے ہیں۔ یہ کتاب 1995 میں "آبجیکٹ اورینٹڈ ڈیزائن کی تکنیک" کے عنوان سے شائع ہوئی تھی ۔ ڈیزائن پیٹرن" . کتاب کا ٹائٹل بہت لمبا نکلا، اور یہ صرف دی بک آف دی گینگ آف فور کے نام سے مشہور ہوئی ۔ پہلے ایڈیشن میں، 23 نمونے شائع کیے گئے، جس کے بعد درجنوں دیگر دریافت ہوئے۔ تو، اس پیراگراف میں سوال کا جواب دیتے ہوئے، "نمونہ کیا ہیں؟" ، آئیے صرف چند الفاظ میں خلاصہ کرتے ہیں:
ایک پیٹرن ایک عام مسئلہ کا معیاری حل ہے۔
اور Singletonیہ ان نمونوں میں سے صرف ایک ہے۔

ہمیں پیٹرن کی ضرورت کیوں ہے (ڈیزائن پیٹرن)

آپ نمونوں کو جانے بغیر پروگرام کر سکتے ہیں؛ آپ اس حقیقت کو سمجھ کر اس کی تصدیق کر سکتے ہیں کہ JavaRush میں 15ویں سطح تک آپ نے سینکڑوں چھوٹے پروگرام لکھے تھے، ان کے وجود کے بارے میں کچھ جانے بغیر۔ اس سے پتہ چلتا ہے کہ پیٹرن ایک قسم کا آلہ ہے، جس کی موجودگی ماسٹر کو شوقیہ سے ممتاز کرتی ہے:
پیٹرنز اور سنگلٹن - ہر اس شخص کے لیے جس نے پہلی بار ان کا سامنا کیا - 3
نمونے بیان کرتے ہیں کہ عام مسائل میں سے ایک کو صحیح طریقے سے کیسے حل کیا جائے۔ نتیجے کے طور پر، پیٹرن کو جاننا آپ کا وقت بچاتا ہے۔ الگورتھم کے ساتھ ایک مشابہت بنائی جا سکتی ہے۔ مثال کے طور پر، آپ بلیک جیک اور نمبرز کے ساتھ اپنا الگورتھم ترتیب دے سکتے ہیں اور اس پر بہت زیادہ وقت صرف کر سکتے ہیں، یا آپ اسے استعمال کر سکتے ہیں جس کی وضاحت بہت پہلے ہو چکی ہے اور اسے نافذ کر سکتے ہیں۔ یہ پیٹرن کے ساتھ ایک ہی ہے. اس کے علاوہ، پیٹرن کے استعمال کے ساتھ، کوڈ زیادہ معیاری ہو جاتا ہے، اور صحیح پیٹرن کا استعمال کرتے وقت، آپ کو غلطیاں کرنے کا امکان کم ہوگا، کیونکہ وہ پہلے ہی اس پیٹرن میں پہلے سے دیکھے اور ختم کردیئے گئے تھے۔ ٹھیک ہے، ہر چیز کے علاوہ، پیٹرن کا علم پروگرامرز کو ایک دوسرے کو بہتر طور پر سمجھنے کی اجازت دیتا ہے۔ اپنے ساتھی پروگرامرز کو سمجھانے کی کوشش کرنے کے بجائے صرف ٹیمپلیٹ کا نام کہنا ہی کافی ہے کہ آپ ان سے کیا کرنا چاہتے ہیں۔ لہذا، خلاصہ کرنے کے لئے، ڈیزائن پیٹرن مدد کرتے ہیں:
  • پہیے کو دوبارہ نہ بنائیں، لیکن معیاری حل استعمال کریں؛
  • معیاری کوڈ؛
  • اصطلاحات کو معیاری بنانا؛
اس سیکشن کے اختتام میں، ہم نوٹ کرتے ہیں کہ پیٹرن کی تمام اقسام کو تین بڑے گروپوں میں آسان بنایا جا سکتا ہے:
پیٹرنز اور سنگلٹن - ہر اس شخص کے لیے جس نے پہلی بار ان کا سامنا کیا - 4

آخر میں سنگلٹن پیٹرن

Singletonجنریٹیو پیٹرن سے مراد اس کا لغوی ترجمہ تنہا ہے۔ یہ پیٹرن اس بات کو یقینی بناتا ہے کہ کلاس میں صرف ایک آبجیکٹ (کلاس کی ایک مثال) ہے اور اس آبجیکٹ کو عالمی رسائی پوائنٹ فراہم کیا گیا ہے۔ تفصیل سے واضح ہو جائے کہ یہ نمونہ دو صورتوں میں استعمال کیا جانا چاہیے:
  1. جب آپ کے پروگرام میں کسی بھی کلاس کے ایک سے زیادہ آبجیکٹ نہیں بنائے جائیں۔ مثال کے طور پر، کمپیوٹر گیم میں آپ کے پاس ایک "کریکٹر" کلاس ہے، اور اس کلاس میں صرف ایک چیز ہونی چاہیے جو کردار کو خود بیان کرے۔

  2. جب آپ کو کسی کلاس آبجیکٹ کو عالمی رسائی پوائنٹ فراہم کرنے کی ضرورت ہوتی ہے۔ دوسرے لفظوں میں، آپ کو اس بات کو یقینی بنانا ہوگا کہ پروگرام میں کسی بھی جگہ سے آبجیکٹ بلایا گیا ہے۔ اور، افسوس، اس کے لیے صرف ایک عالمی متغیر بنانا کافی نہیں ہے، کیونکہ یہ تحریری طور پر محفوظ نہیں ہے اور کوئی بھی اس متغیر کی قدر کو تبدیل کرسکتا ہے اور آبجیکٹ تک عالمی رسائی کا نقطہ ختم ہوجائے گا۔ ان خصوصیات Singletonکی ضرورت ہوتی ہے، مثال کے طور پر، جب آپ کے پاس کلاس کی کوئی چیز ہے جو ڈیٹا بیس کے ساتھ کام کرتی ہے، اور آپ کو پروگرام کے مختلف حصوں سے ڈیٹا بیس تک رسائی کی ضرورت ہوتی ہے۔ اور Singletonیہ اس بات کی ضمانت دے گا کہ کلاس کی پہلے سے تخلیق کردہ مثال کو کسی دوسرے کوڈ نے تبدیل نہیں کیا ہے۔
یہ دو مسائل اس سے حل ہوتے ہیں Singleton: پروگرام میں ایک چیز ہونی چاہیے اور اس تک عالمی رسائی ہونی چاہیے۔ لیول 15 کی مثال میں، ٹوپی مندرجہ ذیل کام کے لیے اس پیٹرن کو نافذ کرنے کو کہتی ہے (اس کی تفصیل یہ ہے):
پیٹرنز اور سنگلٹن - ہر اس شخص کے لیے جس نے پہلی بار ان کا سامنا کیا - 5
شرط کو غور سے پڑھنے کے بعد یہ واضح ہو جاتا ہے کہ Singletonیہاں بالکل (سنگل) کی ضرورت کیوں ہے۔ آخر کار، پروگرام آپ سے ہر کلاس کا ایک آبجیکٹ بنانے کے لیے کہتا ہے: Sun, Moon, Earth۔ اور یہ سمجھنا منطقی ہے کہ پروگرام میں ہر طبقے کو ایک سے زیادہ سورج/چاند/زمین نہیں بنانا چاہیے، ورنہ یہ مضحکہ خیز ہو گا، جب تک کہ یقیناً آپ Star Wars کا اپنا ورژن نہ لکھ رہے ہوں۔ تین مراحل میں جاوا کے نفاذSingleton کی خصوصیت جاوا میں سنگلٹن رویے کو ریگولر کنسٹرکٹر کا استعمال کرتے ہوئے لاگو نہیں کیا جا سکتا کیونکہ کنسٹرکٹر ہمیشہ ایک نئی چیز لوٹاتا ہے۔ لہذا، 'a' کے تمام نفاذ Singletonکنسٹرکٹر کو چھپانے اور ایک عوامی جامد طریقہ بنانے پر اتر آتے ہیں جو کسی ایک شے کے وجود کو کنٹرول کرے گا اور تمام نئی ظاہر ہونے والی اشیاء کو "تباہ" کرے گا۔ اگر Singleton'a' کہا جاتا ہے، تو اسے یا تو ایک نیا آبجیکٹ بنانا چاہیے (اگر یہ پہلے سے پروگرام میں نہیں ہے) یا پہلے سے بنی ہوئی چیز کو واپس کرنا چاہیے۔ ایسا کرنے کے لیے: #1۔ - آپ کو کلاس میں ایک پرائیویٹ سٹیٹک فیلڈ شامل کرنے کی ضرورت ہے جس میں ایک ہی شے ہے:
public class LazyInitializedSingleton {
	private static LazyInitializedSingleton instance; //#1
}
#2 - کلاس کنسٹرکٹر (پہلے سے طے شدہ کنسٹرکٹر) کو نجی بنائیں (تاکہ اس تک رسائی کلاس سے باہر بند ہو، پھر یہ نئی اشیاء واپس نہیں کر سکے گا):
public class LazyInitializedSingleton {
	private static LazyInitializedSingleton instance;
private LazyInitializedSingleton(){} // #2
}
# 3 - ایک جامد تخلیق کے طریقہ کار کا اعلان کریں جو سنگلٹن حاصل کرنے کے لیے استعمال کیا جائے گا:
public class LazyInitializedSingleton {
    private static LazyInitializedSingleton instance;
        private LazyInitializedSingleton(){}
        public static LazyInitializedSingleton getInstance(){ // #3
        if(instance == null){		//if the object has not been created yet
            instance = new LazyInitializedSingleton();	//create a new object
        }
        return instance;		// return the previously created object
    }
}
مندرجہ بالا مثال کچھ اناڑی ہے، کیونکہ ہم صرف کنسٹرکٹر کو چھپاتے ہیں اور معیاری کنسٹرکٹر کی بجائے اپنا طریقہ فراہم کرتے ہیں۔ چونکہ اس مضمون کا مقصد JavaRush کے طلباء کو پہلی بار اس پیٹرن (اور عام طور پر پیٹرن) کے ساتھ رابطے میں آنے کے قابل بنانا ہے، اس لیے یہاں زیادہ پیچیدہ سنگلٹن کے نفاذ کی خصوصیات نہیں دی جائیں گی۔ ہم صرف نوٹ کرتے ہیں کہ پروگرام کی پیچیدگی پر منحصر ہے، اس پیٹرن کی مزید تفصیلی تطہیر کی ضرورت ہو سکتی ہے۔ مثال کے طور پر، ایک ملٹی تھریڈ والے ماحول میں (تھریڈز کا موضوع دیکھیں)، کئی مختلف تھریڈز بیک وقت سنگلٹن کے گیٹر طریقہ کو کال کر سکتے ہیں، اور اوپر بیان کردہ کوڈ کام کرنا بند کر دے گا، کیونکہ ہر انفرادی تھریڈ کلاس کی متعدد مثالیں تخلیق کر سکے گا۔ ایک بار میں. لہذا، صحیح تھریڈ سیف سنگلٹن بنانے کے لیے اب بھی کئی مختلف طریقے موجود ہیں۔ لیکن یہ ایک اور کہانی ہے =) اور آخر کار۔ سست ابتداء کیا ہے جس کے لئے کیپ نے پوچھا ہے ؟ یہ ایک پروگرامنگ تکنیک ہے جہاں وسائل سے متعلق آپریشن (اور کسی چیز کی تخلیق ایک وسائل سے متعلق آپریشن ہے) پیشگی کے بجائے مطالبہ پر کیا جاتا ہے۔ جو بنیادی طور پر ہمارے کوڈ Singleton'a' میں ہوتا ہے۔ دوسرے لفظوں میں، ہمارا اعتراض اس وقت پیدا ہوتا ہے جب اس تک رسائی حاصل ہوتی ہے، نہ کہ پہلے سے۔ یہ خیال نہیں کیا جانا چاہئے کہ سست ابتداء کا تصور کسی نہ کسی طرح Singleton'اوم' کے ساتھ سختی سے جڑا ہوا ہے۔ سست ابتداء دیگر تخلیقی ڈیزائن کے نمونوں میں بھی استعمال ہوتی ہے، مثال کے طور پر پراکسی اور فیکٹری میتھڈ میں، لیکن یہ ایک اور کہانی ہے =) مضمون کی تیاری میں درج ذیل ذرائع استعمال کیے گئے:
  1. جاوا سنگلٹن ڈیزائن پیٹرن مثالوں کے ساتھ بہترین طرز عمل
  2. ڈیزائن پیٹرن
  3. جاوا میں سنگلٹن کو درست کریں۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION