JavaRush /جاوا بلاگ /Random-SD /نمونن ۽ سنگلٽن - هر ڪنهن لاء جيڪو پهريون ڀيرو انهن سان من...

نمونن ۽ سنگلٽن - هر ڪنهن لاء جيڪو پهريون ڀيرو انهن سان منهن ڪيو

گروپ ۾ شايع ٿيل
هي مضمون انهن لاءِ آهي جيڪي پهريون ڀيرو نمونن جي تصور کي سامهون رکي، Singleton’اي‘ بابت ٻڌو، يا ڪنهن طرح ان کي ٺاهيو، پر اڃا تائين ڪجهه به نه سمجهي سگهيو آهي. ڀلي ڪري آيا! JavaRush شاگردن کي پهريون ڀيرو نمونن سان منهن ڏيڻو پوي ٿو سطح 15 تي، جڏهن غير متوقع طور تي ڪيپ پڇي ٿي ”فيڪس“ ڪرڻ ۽ Singletonهڪ سستي عمل سان نموني لاڳو ڪرڻ. شاگرد جيڪي ان جي باري ۾ پهريون ڀيرو ٻڌن ٿا، Singletonفوري طور تي سوالن جو هڪ گروپ آهي: هڪ نمونو ڇا آهي، اهو ڇو ضروري آهي، اهو ڪهڙي قسم جو نمونو آهي، Singleton۽ آخرڪار، اهو ڪهڙي قسم جو سست عمل آهي. اچو ته ترتيب سان جواب ڏيڻ شروع ڪريون: نمونن ۽ سنگلٽن - هر ڪنهن لاءِ جيڪو انهن سان پهريون ڀيرو مليو - 1

تنهن هوندي به هڪ نمونو ڇا آهي؟

بهتر سمجھڻ لاءِ، مان سمجهان ٿو ته تاريخ مان هن سوال جو جواب ڏيڻ ضروري آهي. پروگرامرن جي وچ ۾ اهڙا چار مشهور ليکڪ آهن: Erich Gamma، Richard Helm، Ralph Johnson ۽ John Vlissides، جن کي هڪ دلچسپ خيال آيو.
نمونن ۽ سنگلٽن - هر ڪنهن لاءِ جيڪو انهن سان پهريون ڀيرو مليا - 2
هنن محسوس ڪيو ته جڏهن پروگرام لکندا هئا، انهن کي اڪثر ڪري تقريباً ساڳيا مسئلا حل ڪرڻا پوندا هئا ۽ هڪ ئي قسم جو ڪوڊ ڍانچي ۾ لکندا هئا. تنهن ڪري، انهن نمونن جي شڪل ۾ بيان ڪرڻ جو فيصلو ڪيو عام نمونن جيڪي اڪثر استعمال ڪيا ويندا آهن اعتراض تي مبني پروگرامنگ. هي ڪتاب 1995ع ۾ ”ٽيڪنڪس آف آبجیکٹ-اورينٽيڊ ڊيزائن“ جي عنوان سان شايع ٿيو . ڊيزائن جا نمونا " . ڪتاب جو عنوان تمام ڊگهو ٿي ويو، ۽ اهو صرف چار گنگا جي ڪتاب جي نالي سان مشهور ٿيو . پهرين ڇاپي ۾، 23 نمونا شايع ڪيا ويا، جن کان پوء ٻيا درجنين دريافت ڪيا ويا. تنهن ڪري، هن پيراگراف ۾ سوال جو جواب، "نمونون ڇا آهن؟" ، اچو ته صرف چند لفظن ۾ خلاصو:
ھڪڙو نمونو ھڪڙي عام مسئلي جو معياري حل آھي.
۽ Singletonهي صرف انهن نمونن مان هڪ آهي.

اسان کي ڇو نمونن جي ضرورت آهي (ڊزائن جي نمونن)

توھان بغير نمونن کي ڄاڻڻ کان سواءِ پروگرام ڪري سگھو ٿا؛ توھان ان جي تصديق ڪري سگھوٿا صرف ان حقيقت کي سمجھڻ سان ته توھان JavaRush ۾ 15th ليول تائين سوين ميني پروگرام لکيا ھئا، سواءِ انھن جي وجود بابت ڪجھ به ڄاڻڻ کان سواءِ. اهو مشورو ڏئي ٿو ته هڪ نمونو هڪ قسم جو اوزار آهي، جنهن جي موجودگي هڪ ماسٽر کي شوقين کان ڌار ڪري ٿو:
نمونن ۽ سنگلٽن - هر ڪنهن لاءِ جيڪو انهن سان پهريون ڀيرو مليو - 3
نمونن بيان ڪري ٿو ته ڪيئن صحيح طريقي سان حل ڪجي عام مسئلن مان. نتيجي طور، نمونن کي ڄاڻڻ توهان جو وقت بچائيندو آهي. هڪ قياس ٺاهي سگهجي ٿو الگورتھم سان. مثال طور، توهان بليڪ جيڪ ۽ انگن سان پنهنجو ترتيب ڏيڻ وارو الگورتھم وٺي سگهو ٿا ۽ ان تي گهڻو وقت خرچ ڪري سگهو ٿا، يا توهان هڪ استعمال ڪري سگهو ٿا جيڪو اڳ ۾ ئي بيان ڪيو ويو آهي ۽ ان کي لاڳو ڪريو. اهو ساڳيو نمونن سان آهي. ان سان گڏ، نمونن جي استعمال سان، ڪوڊ وڌيڪ معياري ٿي ويندو آهي، ۽ صحيح نمونن کي استعمال ڪندي، توهان کي غلطي ڪرڻ جو امڪان گهٽ ٿيندو، ڇاڪاڻ ته اهي اڳ ۾ ئي اڳ ۾ ئي هئا ۽ هن نموني ۾ ختم ٿي ويا. خير، گڏوگڏ سڀ ڪجهه، نمونن جي ڄاڻ پروگرامرن کي هڪ ٻئي کي بهتر سمجهڻ جي اجازت ڏئي ٿي. صرف ٽيمپليٽ جو نالو چوڻ ڪافي آهي، بجاءِ پنهنجي ساٿي پروگرامرز کي بيان ڪرڻ جي ڪوشش ڪرڻ جي ته توهان انهن کي ڇا ڪرڻ چاهيو ٿا. تنهن ڪري، اختصار ڪرڻ لاء، ڊزائن جا نمونا مدد ڪن ٿا:
  • ڦيٿي کي ٻيهر نه ٺاهيو، پر معياري حل استعمال ڪريو؛
  • معياري ڪوڊ؛
  • معياري اصطلاحات؛
هن حصي جي نتيجي ۾، اسان ياد رکون ٿا ته نمونن جي سڀني قسمن کي ٽن وڏن گروپن ۾ آسان بڻائي سگهجي ٿو:
نمونن ۽ سنگلٽن - هر ڪنهن لاءِ جيڪو انهن سان پهريون ڀيرو مليا - 4

آخرڪار هڪ سنگلٽن جو نمونو

Singletonپيدا ٿيندڙ نمونن ڏانهن اشارو ڪري ٿو . ان جو لفظي ترجمو اڪيلو آهي. اهو نمونو يقيني بڻائي ٿو ته هڪ طبقي ۾ صرف هڪ اعتراض آهي (ڪلاس جو هڪ مثال) ۽ انهي اعتراض کي هڪ عالمي رسائي پوائنٽ مهيا ڪئي وئي آهي. وضاحت مان واضح ٿيڻ گهرجي ته هي نمونو ٻن صورتن ۾ استعمال ٿيڻ گهرجي:
  1. جڏهن توهان جي پروگرام ۾ ڪنهن به طبقي جو هڪ کان وڌيڪ اعتراض نه ٺاهيو وڃي. مثال طور، ڪمپيوٽر جي راند ۾، توهان وٽ هڪ "ڪردار" ڪلاس آهي، ۽ هن طبقي ۾ صرف هڪ اعتراض هجڻ گهرجي جيڪو ڪردار کي بيان ڪري ٿو.

  2. جڏهن توهان کي ڪلاس اعتراض کي عالمي رسائي پوائنٽ مهيا ڪرڻ جي ضرورت آهي. ٻين لفظن ۾، توهان کي پڪ ڪرڻ جي ضرورت آهي ته اعتراض کي پروگرام ۾ ڪٿي به سڏيو ويندو آهي. ۽، افسوس، هن لاءِ اهو ڪافي ناهي ته صرف هڪ عالمي متغير ٺاهڻ لاءِ، ڇاڪاڻ ته اهو لکڻ کان محفوظ نه آهي ۽ ڪو به ماڻهو هن متغير جي قدر کي تبديل ڪري سگهي ٿو ۽ اعتراض جي عالمي رسائي واري نقطي کي وڃائي ڇڏيو ويندو. اهي خاصيتون Singletonگهربل آهن، مثال طور، جڏهن توهان وٽ هڪ طبقي جو اعتراض آهي جيڪو ڊيٽابيس سان ڪم ڪري ٿو، ۽ توهان کي ڊيٽابيس جي ضرورت آهي پروگرام جي مختلف حصن کان رسائي حاصل ڪرڻ لاء. ۽ Singletonاها ضمانت ڏيندو ته ڪو ٻيو ڪوڊ ڪلاس جي اڳئين ٺاهيل مثال کي تبديل نه ڪيو آهي.
اهي ٻه مسئلا حل ڪيا ويا آهن Singleton: پروگرام ۾ هڪ اعتراض هجڻ گهرجي ۽ ان کي عالمي رسائي هجڻ گهرجي. مثال ۾ سطح 15 تي، ڪيپ پڇي ٿي ته هن نموني کي هيٺين ڪم لاءِ لاڳو ڪيو وڃي (هتي ان جي وضاحت آهي):
نمونن ۽ سنگلٽن - هر ڪنهن لاءِ جيڪو انهن سان پهريون ڀيرو مليو - 5
حالت کي غور سان پڙهڻ کان پوءِ، اهو واضح ٿئي ٿو ته Singletonهتي (Single) ڇو ضروري آهي. آخرڪار، پروگرام توهان کي هر طبقي مان هڪ اعتراض ٺاهڻ لاء پڇي ٿو: 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 شاگردن کي پهريون ڀيرو هن نموني (۽ عام طور تي نمونن) سان رابطي ۾ اچڻ جي قابل ڪرڻ آهي، وڌيڪ پيچيده سنگليٽن جي نفاذ جون خاصيتون هتي نه ڏنيون وينديون. اسان صرف ياد رکون ٿا ته پروگرام جي پيچيدگي تي منحصر ڪري، هن نموني جي وڌيڪ تفصيلي اصلاح جي ضرورت ٿي سگھي ٿي. مثال طور، گھڻن موضوعن واري ماحول ۾ (ڏسو ٿريڊس جو موضوع)، ڪيترائي مختلف موضوع هڪ ئي وقت سنگلٽن جي گيٽر طريقي کي سڏي سگهن ٿا، ۽ مٿي بيان ڪيل ڪوڊ ڪم ڪرڻ بند ڪري ڇڏيندو، ڇاڪاڻ ته هر هڪ ٿريڊ ڪلاس جا ڪيترائي مثال ٺاهي سگهندا. هڪ دم. تنهن ڪري، صحيح ٿريڊ-محفوظ سنگلٽن ٺاهڻ لاءِ اڃا به ڪيترائي مختلف طريقا آهن. پر اها ٻي ڪهاڻي آهي =) ۽ آخرڪار. Lazy Initialization ڇا آھي جنھن لاءِ ڪيپ پڇي ٿي ؟ هي هڪ پروگرامنگ ٽيڪنڪ آهي جتي هڪ وسيلا-گھڻي آپريشن (۽ هڪ اعتراض ٺاهڻ هڪ وسيلا-گھڻي آپريشن آهي) پيشگي جي ڀيٽ ۾، طلب تي ڪيو ويندو آهي. جيڪو بنيادي طور تي اسان جي ڪوڊ ۾ ٿئي ٿو Singleton'a. ٻين لفظن ۾، اسان جو اعتراض ان وقت پيدا ڪيو ويو آهي جڏهن اهو پهچندو آهي، ۽ اڳ ۾ نه. اهو نه سمجهيو وڃي ته سست شروعات جو تصور ڪنهن نه ڪنهن طرح Singleton’اوم‘ سان سختي سان جڙيل آهي. سست شروعات ٻين پيداواري ڊيزائن جي نمونن ۾ پڻ استعمال ٿئي ٿي، مثال طور پراڪسي ۽ فيڪٽري ميٿڊ ۾، پر اها ٻي ڪهاڻي آهي =) مضمون تيار ڪرڻ ۾ هيٺيون ذريعا استعمال ڪيا ويا:
  1. جاوا سنگلٽن ڊيزائن جو نمونو بهترين طريقا مثالن سان
  2. ڊيزائن جا نمونا
  3. جاوا ۾ سنگلٽن کي درست ڪريو
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION