CodeGym /جاوا بلاگ /Random-SD /جاوا ۾ نمونن ۽ سنگلٽن
John Squirrels
سطح
San Francisco

جاوا ۾ نمونن ۽ سنگلٽن

گروپ ۾ شايع ٿيل
هن آرٽيڪل جو مقصد هر ڪنهن لاءِ آهي، جيڪو پهريون ڀيرو، ڊزائن جي نمونن جي تصور سان منهن ڏئي رهيو آهي، سنگلٽن جو اصطلاح ٻڌو آهي، يا ڪنهن به طرح سنگلٽن پيٽرن تي عمل ڪيو آهي پر اهو نه سمجهي سگهيو ته ڇا ٿي رهيو آهي. ڀلي ڪري آيا! ڪوڊ گيم شاگردن کي پهريون ڀيرو ليول 15 تي ڊيزائن جي نمونن سان منهن ڏيڻو پوي ٿو، جڏهن ڪئپٽن غير متوقع طور تي انهن کي "مضبوط" ڪرڻ لاءِ پڇي ٿو جاوا سنگلٽن نمونن کي سست عمل سان لاڳو ڪندي انهن جي سمجهاڻي کي. شاگرد پهريون ڀيرو سنگلٽن پيٽرن جي باري ۾ ٻڌي رهيا آهن فوري طور تي ڪيترائي سوال آهن: دنيا ۾ ڇا آهي ڊزائن جو نمونو؟ اسان کي ان جي ضرورت ڇو آهي؟ سنگلٽن ڇا آهي ؟ ۽ آخرڪار، سست عمل ڇا آهي؟ اچو ته انهن سوالن جا جواب ترتيب ڏيو.

دنيا ۾ ڇا آهي ڊزائن جو نمونو؟

مان سمجهان ٿو ته ٿوري تاريخ آهي انهي سوال جو جواب ڏيڻ لاءِ بهترين سمجهاڻي سان. هتي چار مشهور پروگرامنگ ليکڪ آهن (ايريچ گاما، جان ويلسڊس، رالف جانسن، ۽ رچرڊ هيلم) جيڪي هڪ دلچسپ خيال سان آيا. انهن محسوس ڪيو ته سافٽ ويئر ڊولپمينٽ اڪثر ڪري انهن کي گهربل ساڳيون ئي مسئلا حل ڪرڻ جي ضرورت آهي ۽ ساڳئي طريقي سان ٺهيل ڪوڊ لکڻ. تنهن ڪري انهن عام نمونن کي بيان ڪرڻ جو فيصلو ڪيو جيڪي اڪثر استعمال ڪرڻ جي ضرورت هونديون اعتراض تي مبني پروگرامنگ ۾. سندن ڪتاب 1994ع ۾ ڇپيو، جنهن جي عنوان سان ڊيزائن پيٽرن: ايليمينٽس آف ري يوز ايبل آبجیکٹ-اورينٽيڊ سافٽ ويئر آهي. ڪتاب جو نالو تمام ڊگهو ٿي ويو ۽ ماڻهو ان کي گنگ آف فور جو ڪتاب سڏڻ لڳا. پهرين ڇاپي ۾ 23 نمونا شامل هئا. ان کان پوء، ڪيترن ئي ٻين نمونن کي دريافت ڪيو ويو. تنهن ڪري اچو ته هن پيراگراف جي سوال جو مختصر جواب ڏيون (دنيا ۾ ڇا آهي ڊزائن جا نمونا؟)
ھڪڙي ڊيزائن جو نمونو ھڪڙي عام مسئلي جو معياري حل آھي.
۽ سنگلٽن جو نمونو صرف انهن مان هڪ آهي.

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

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

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

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

  2. جڏهن توهان کي ڪنهن شئي تائين عالمي رسائي لاءِ پوائنٽ مهيا ڪرڻ جي ضرورت آهي. ٻين لفظن ۾، توهان کي ضرورت آهي اعتراض کي دستياب ڪرڻ جي پروگرام ۾ ڪٿي به. افسوس، اهو صرف هڪ عالمي متغير ٺاهڻ لاء ڪافي ناهي، ڇاڪاڻ ته اهو لکڻ کان محفوظ نه آهي: ڪو به ماڻهو متغير جي قيمت کي تبديل ڪري سگهي ٿو، تنهنڪري اعتراض جي عالمي رسائي واري نقطي وڃائي سگھي ٿي. هڪ سنگلٽن جون اهي خاصيتون ضروري آهن، مثال طور، جڏهن توهان وٽ هڪ اعتراض آهي جيڪو ڊيٽابيس سان ڪم ڪري ٿو، ۽ توهان کي پروگرام جي مختلف حصن مان ڊيٽابيس تائين رسائي جي ضرورت آهي. هڪ سنگلٽن انهي ڳالهه کي يقيني بڻائيندو ته ڪو به ڪوڊ نه لکندو آهي جيڪو اڳ ٺاهيل مثال کي تبديل ڪري ٿو.
تنهن ڪري هڪ سنگلٽن انهن ٻن ضرورتن کي پورو ڪيو: پروگرام ۾ صرف هڪ خاص قسم جو اعتراض هجڻ گهرجي ۽ ان کي عالمي رسائي هجڻ گهرجي. ليول 15 تي مثال ۾، ڪئپٽن توھان کان پڇي ٿو ھيٺ ڏنل ڪم لاءِ ھن نموني کي لاڳو ڪرڻ لاءِ:
  1. سست شروعات سان سنگلٽن جو مثال ڳوليو .

  2. ٽي سنگلٽن ڪلاس ٺاهيو - سج، چنڊ، ڌرتي - الڳ فائلن ۾ ساڳي اصول کي استعمال ڪندي.

  3. لاڳو ڪرڻسياروسج ، چنڊ ۽ ڌرتي طبقن ۾ انٽرفيس .

  4. حل ڪلاس جي جامد بلاڪ ۾ ڪال ڪريوreadKeyFromConsoleAndInitPlanetطريقو.

  5. لاڳو ڪريوreadKeyFromConsoleAndInitPlanetطريقيڪار جي ڪارڪردگي:

    • 5.1. ڪنسول مان ھڪڙو اسٽرنگ پيٽرولر پڙھو

    • 5.2. جيڪڏهن پيٽرول هڪ جي برابر آهيسياروانٽرفيس جي مستقل، مناسب ٺاھ ٺاھيو ThePlanet اعتراض.

ڪم جي حالتن کي غور سان پڙهڻ کان پوءِ، اسان واضح طور تي ڏسي سگهون ٿا ته هتي سنگلٽن جي ضرورت ڇو آهي. درحقيقت، اسان کي هيٺين طبقن مان هر هڪ مثال ٺاهڻ لاء چيو ويو آهي: سج ، چنڊ ، ڌرتي . اهو سمجهه ۾ اچي ٿو ته اسان کي هڪ کان وڌيڪ سج / چنڊ / ڌرتي ٺاهڻ نه گهرجي. ٻي صورت ۾، اسان هڪ غير معمولي صورتحال ۾ وڃون ٿا، جيستائين يقينا توهان اسٽار وار جو پنهنجو نسخو نه لکي رهيا آهيو. جاوا ۾ سنگلٽن پيٽرن کي ٽن مرحلن ۾ لاڳو ڪرڻ جاوا ۾، سنگلٽن رويي کي عام ڪنسٽرڪٽر جي استعمال سان لاڳو نٿو ڪري سگھجي، ڇاڪاڻ ته ھڪڙي ٺاھيندڙ ھميشه ھڪڙو نئون اعتراض موٽائي ٿو. تنهن ڪري، سنگلٽن جا سڀئي عمل ڪنسٽرڪٽر کي لڪائڻ لاءِ، هڪ عوامي جامد طريقو ٺاهي ٿو جيڪو سنگلٽن اعتراض جي زندگيءَ کي ڪنٽرول ڪري ٿو، ۽ سڀني نئين ظاهر ٿيندڙ شين کي ”تباهي“ ڪري ٿو. جيڪڏهن هڪ سنگلٽن تائين رسائي آهي، ان کي يا ته هڪ نئون اعتراض ٺاهڻ گهرجي (جيڪڏهن ڪو پروگرام ۾ اڳ ۾ ئي موجود ناهي)، يا هڪ موجوده هڪ واپسي. هن کي پورو ڪرڻ لاء:
  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 yet been created
                instance = new LazyInitializedSingleton(); // Create a new object
            }
            return instance; // Return the previously created object
        }
    }
مٿي ڏنل مثال ڪجهه بي ترتيب آهي، ڇاڪاڻ ته اسان صرف تعمير ڪندڙ کي لڪائيندا آهيون ۽ معياري تعمير ڪندڙ جي بدران پنهنجو طريقو مهيا ڪندا آهيون. جيئن ته هن آرٽيڪل جو مقصد انهي ڳالهه کي يقيني بڻائڻ آهي ته CodeGym شاگرد هن نموني سان رابطي ۾ اچن (۽ عام طور تي ڊزائين جا نمونا)، وڌيڪ پيچيده سنگلٽن لاڳو ڪرڻ جي nuances هتي بيان نه ڪيو ويندو. اسان صرف اهو نوٽ ڪريون ٿا، پروگرام جي پيچيدگي تي منحصر ڪري، هن نموني کي وڌيڪ بهتر ڪرڻ جي ضرورت آهي. مثال طور، گھڻن موضوعن واري ماحول ۾ (ڏسو مضمونن بابت مضمون)، ڪيترائي مختلف موضوع هڪ ئي وقت سنگلٽن ميٿڊ تائين پهچن ٿا، ۽ مٿي بيان ڪيل ڪوڊ ڪم ڪرڻ بند ڪري ڇڏيندو، ڇاڪاڻ ته هر الڳ ٿريڊ ڪلاس جو هڪ مثال ٺاهي سگهي ٿو. نتيجي طور، اڃا تائين ڪيترائي مختلف طريقا موجود آهن مناسب موضوع-محفوظ سنگلٽن ٺاهڻ لاء. پر اها ٻي ڪهاڻي آهي =)

۽ آخر... اها سست شروعات ڪهڙي آهي جنهن بابت ڪپتان پڇيو؟

سست شروعات کي ڊفر ٿيل شروعات پڻ سڏيو ويندو آهي. هي پروگرامنگ ٽرڪ آهي جتي هڪ وسيلا-گھڻي آپريشن (۽ هڪ اعتراض ٺاهڻ هڪ وسيلا-گھڻي آپريشن آهي) اڳواٽ جي ڀيٽ ۾ طلب تي ڪيو ويندو آهي. پوء ڇا اصل ۾ اسان جي سنگلٽن جاوا ڪوڊ ۾ ٿئي ٿو؟ ٻين لفظن ۾، اسان جو اعتراض ان وقت ٺاهيو ويو آهي جڏهن ان تائين پهچندي آهي، اڳ ۾ نه. توهان کي اهو نه سمجهڻ گهرجي ته سست شروعات ڪنهن حد تائين سختي سان سنگلٽن جي نموني سان ڳنڍيل آهي. سست ابتڙ ٻين تخليقي ڊيزائن جي نمونن ۾ پڻ استعمال ڪيو ويندو آهي، جهڙوڪ پراکسي ۽ فيڪٽري طريقو، پر اهو پڻ هڪ ٻي ڪهاڻي آهي =)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION