
جاوا ۾ سنگلٽن ڇا آهي؟
سنگلٽن هڪ آسان ترين طبقي سطح جي ڊيزائن جي نمونن مان هڪ آهي. ڪڏهن ڪڏهن ماڻهو چوندا آهن "هي ڪلاس سنگلٽن آهي"، جنهن جو مطلب آهي ته ڪلاس سنگلٽن ڊيزائن جي نموني کي لاڳو ڪري ٿو. ڪڏهن ڪڏهن اهو ضروري هوندو آهي ته هڪ ڪلاس لکڻو هجي جتي اسان انسٽنٽيشن کي صرف هڪ اعتراض تائين محدود رکون ٿا. مثال طور، هڪ ڪلاس لاگ ان ڪرڻ يا ڳنڍڻ جو ذميوار ڊيٽابيس. سنگلٽن ڊيزائن جو نمونو بيان ڪري ٿو ته اسان اهو ڪيئن حاصل ڪري سگهون ٿا. سنگلٽن هڪ ڊزائن جو نمونو آهي جيڪو ٻه شيون ڪري ٿو:-
اها ضمانت ڏئي ٿي ته ڪلاس جو صرف هڪ مثال هوندو.
-
اهو انهي مثال تائين عالمي رسائي جو هڪ واحد نقطو مهيا ڪري ٿو.
-
هڪ خانگي تعمير ڪندڙ. هي طبقن جي شيون ٺاهڻ جي صلاحيت کي محدود ڪري ٿو ڪلاس کان ٻاهر.
-
ھڪڙو عوامي جامد طريقو جيڪو ڪلاس جو مثال ڏئي ٿو. اهو طريقو سڏيو ويندو آهي getInstance . هي ڪلاس مثال تائين عالمي رسائي جو نقطو آهي.
لاڳو ڪرڻ جا اختيار
سنگلٽن ڊيزائن جو نمونو مختلف طريقن سان لاڳو ٿئي ٿو. هر اختيار پنهنجي طريقي سان سٺو ۽ خراب آهي. هميشه وانگر، هتي ڪو به ڀرپور اختيار ناهي، پر اسان کي هڪ لاء ڪوشش ڪرڻ گهرجي. سڀ کان پهريان، اچو ته اهو فيصلو ڪريون ته ڪهڙي شيءِ سٺي ۽ خراب آهي، ۽ ڪهڙيون ماپون اثر انداز ٿين ٿيون ته اسان ڊزائن جي نمونن جي مختلف عملن جو اندازو ڪيئن ڪريون ٿا. اچو ته سٺي سان شروع ڪريون. هتي اهڙا عنصر آهن جيڪي عمل درآمد کي وڌيڪ رسيل ۽ اپيل ڪن ٿا:-
سست شروعات: مثال پيدا نه ڪيو وڃي جيستائين اهو گهربل هجي.
-
سادي ۽ شفاف ڪوڊ: هي ميٽرڪ، يقينا، موضوعي آهي، پر اهو اهم آهي.
-
موضوع جي حفاظت: هڪ گھڻن موضوعن واري ماحول ۾ صحيح آپريشن.
-
گھڻن موضوعن واري ماحول ۾ اعلي ڪارڪردگي: وسيلا شيئر ڪرڻ وقت ٿورڙو يا ڪو ٿريڊ بلاڪ ڪرڻ.
-
ڪابه سست شروعات ناهي: جڏهن ڪلاس لوڊ ڪيو ويندو آهي جڏهن ايپليڪيشن شروع ٿئي ٿي، قطع نظر ان جي ضرورت آهي يا نه (متضاد طور تي، آئي ٽي دنيا ۾ اهو بهتر آهي سست ٿيڻ)
-
پيچيده ۽ ڏکيو-پڙهڻ ڪوڊ. هي ميٽرڪ پڻ تابع آهي. جيڪڏهن توهان جون اکيون رت وهڻ شروع ڪن، اسان سمجهون ٿا ته عمل درآمد بهترين نه آهي.
-
تارن جي حفاظت جي کوٽ. ٻين لفظن ۾، "خطرو". گھڻن موضوعن واري ماحول ۾ غلط آپريشن.
-
گهڻن موضوعن واري ماحول ۾ خراب ڪارڪردگي: موضوع هڪ ٻئي کي هر وقت بلاڪ ڪندا آهن يا اڪثر ڪري جڏهن وسيلن کي حصيداري ڪندا آهن.
ڪوڊ
ھاڻي اسان تيار آھيون مختلف عمل درآمد جي اختيارن تي غور ڪرڻ ۽ نفعو ۽ نقصان جي نشاندهي ڪرڻ لاءِ:سادو
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return INSTANCE;
}
}
آسان ترين عمل. فائدا:
-
سادي ۽ شفاف ڪوڊ
-
تار جي حفاظت
-
گھڻن موضوعن واري ماحول ۾ اعلي ڪارڪردگي
- ڪابه سست شروعات.
سست شروعات
public class Singleton {
private static final Singleton INSTANCE;
private Singleton() {}
public static Singleton getInstance() {
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}
}
فائدا:
-
سست شروعات.
-
نه تار محفوظ
هم وقت رسائي
public class Singleton {
private static final Singleton INSTANCE;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}
}
فائدا:
-
سست شروعات.
-
تار جي حفاظت
-
ضعيف multithreaded ڪارڪردگي
ٻه ڀيرا چيڪ ٿيل تالا
public class Singleton {
private static final Singleton INSTANCE;
private Singleton() {
}
public static Singleton getInstance() {
if (INSTANCE == null) {
synchronized (Singleton.class) {
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
}
}
return INSTANCE;
}
}
فائدا:
-
سست شروعات.
-
تار جي حفاظت
-
گھڻن موضوعن واري ماحول ۾ اعلي ڪارڪردگي
-
1.5 کان هيٺ جاوا جي اڳئين ورزن ۾ سپورٽ نه ڪئي وئي (1.5 ورزن کان وٺي غير مستحڪم لفظ جو استعمال مقرر ٿيل آهي)
ڪلاس هولڊر
public class Singleton {
private Singleton() {
}
private static class SingletonHolder {
public static final Singleton HOLDER_INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.HOLDER_INSTANCE;
}
}
فائدا:
-
سست شروعات.
-
تار جي حفاظت.
-
گھڻن موضوعن واري ماحول ۾ اعلي ڪارڪردگي.
-
صحيح آپريشن کي ضمانت جي ضرورت آهي ته سنگلٽن اعتراض بغير غلطين جي شروعات ڪئي وئي آهي. ٻي صورت ۾، getInstance طريقي جي پهرين ڪال جو نتيجو ٿيندو ExceptionInInitializerError ، ۽ سڀ ايندڙ ڪالون هڪ NoClassDefFoundError پيدا ڪنديون .
عمل درآمد | سست شروعات | تار جي حفاظت | گھڻائي واري ڪارڪردگي | جڏهن استعمال ڪرڻ لاء؟ |
---|---|---|---|---|
سادو | - | + | تڪڙو | ڪڏهن به نه. يا ممڪن طور تي جڏهن سست شروعات اهم ناهي. پر ڪڏهن به بهتر نه ٿيندو. |
سست شروعات | + | - | لاڳو نٿو ٿئي | هميشه جڏهن multithreading جي ضرورت نه آهي |
هم وقت رسائي | + | + | آهستي | ڪڏهن به نه. يا ممڪن طور تي جڏهن multithreaded ڪارڪردگي ڪا به اهميت نه رکندو آھي. پر ڪڏهن به بهتر نه ٿيندو. |
ٻه ڀيرا چيڪ ٿيل تالا | + | + | تڪڙو | نادر ڪيسن ۾ جڏهن سنگلٽن ٺاهڻ وقت توهان کي استثنا کي سنڀالڻ جي ضرورت آهي (جڏهن ڪلاس هولڊر سنگلٽن لاڳو نه هجي) |
ڪلاس هولڊر | + | + | تڪڙو | جڏهن ته multithreading جي ضرورت آهي ۽ اتي هڪ ضمانت آهي ته singleton اعتراض پيدا ڪيو ويندو بغير ڪنهن مسئلن. |
سنگلٽن جي نموني جا فائدا ۽ نقصان
عام طور تي، هڪ سنگلٽن اهو ئي ڪري ٿو جيڪو ان جي توقع آهي:-
اها ضمانت ڏئي ٿي ته ڪلاس جو صرف هڪ مثال هوندو.
-
اهو انهي مثال تائين عالمي رسائي جو هڪ واحد نقطو مهيا ڪري ٿو.
-
سنگلٽن واحد ذميواري اصول جي ڀڃڪڙي ڪري ٿو: ان جي سڌي فرضن کان علاوه، سنگلٽن ڪلاس پڻ مثالن جي تعداد کي سنڀاليندو آهي.
-
هڪ عام طبقي جو سنگلٽن تي انحصار طبقي جي عوامي معاهدي ۾ نظر نٿو اچي.
-
گلوبل variables خراب آهن. بالآخر، هڪ سنگل هڪ وڏي عالمي متغير ۾ بدلجي ٿو.
-
سنگلٽن جي موجودگي مجموعي طور تي ايپليڪيشن جي قابليت کي گھٽائي ٿي ۽ طبقن جيڪي خاص طور تي سنگلٽن کي استعمال ڪن ٿا.
GO TO FULL VERSION