
ஜாவாவில் சிங்கிள்டன் என்றால் என்ன?
சிங்கிள்டன் எளிய வகுப்பு-நிலை வடிவமைப்பு வடிவங்களில் ஒன்றாகும். சில நேரங்களில் மக்கள் "இந்த கிளாஸ் சிங்கிள்டன்" என்று கூறுகிறார்கள், அதாவது வகுப்பு சிங்கிள்டன் வடிவமைப்பு முறையை செயல்படுத்துகிறது. சில சமயங்களில் ஒரு வகுப்பை எழுதுவது அவசியமாகிறது, அங்கு ஒரு பொருளுக்கு உடனடியாகத் தடை விதிக்கிறோம். எடுத்துக்காட்டாக, உள்நுழைவதற்கு அல்லது இணைக்கும் பொறுப்பு வகுப்பு. தரவுத்தளமானது.சிங்கிள்டன் வடிவமைப்பு முறை நாம் இதை எவ்வாறு அடையலாம் என்பதை விவரிக்கிறது.சிங்கிள்டன் என்பது இரண்டு விஷயங்களைச் செய்யும் வடிவமைப்பு வடிவமாகும்:-
வகுப்பின் ஒரே ஒரு நிகழ்வு மட்டுமே இருக்கும் என்று இது உத்தரவாதம் அளிக்கிறது.
-
அந்த நிகழ்விற்கான உலகளாவிய அணுகலின் ஒரு புள்ளியை இது வழங்குகிறது.
-
ஒரு தனியார் கட்டமைப்பாளர். இது வகுப்பிற்கு வெளியே வர்க்கத்தின் பொருட்களை உருவாக்கும் திறனைக் கட்டுப்படுத்துகிறது.
-
வகுப்பின் நிகழ்வை வழங்கும் பொது நிலையான முறை. இந்த முறை getInstance என்று அழைக்கப்படுகிறது . இது வகுப்பு நிகழ்விற்கான உலகளாவிய அணுகலின் புள்ளியாகும்.
அமலாக்க விருப்பங்கள்
சிங்கிள்டன் வடிவமைப்பு முறை பல்வேறு வழிகளில் பயன்படுத்தப்படுகிறது. ஒவ்வொரு விருப்பமும் அதன் சொந்த வழியில் நல்லது மற்றும் கெட்டது. எப்போதும் போல, இங்கே சரியான விருப்பம் இல்லை, ஆனால் நாம் ஒன்றுக்காக பாடுபட வேண்டும். முதலில், எது நல்லது மற்றும் கெட்டது என்பதை முடிவு செய்வோம், மேலும் வடிவமைப்பு வடிவத்தின் பல்வேறு செயலாக்கங்களை எவ்வாறு மதிப்பிடுகிறோம் என்பதைப் பாதிக்கும் அளவீடுகள். நல்லதில் இருந்து ஆரம்பிக்கலாம். செயல்படுத்தலை மிகவும் தாகமாகவும் கவர்ச்சியாகவும் செய்யும் காரணிகள் இங்கே உள்ளன:-
சோம்பேறி துவக்கம்: அது தேவைப்படும் வரை நிகழ்வு உருவாக்கப்படவில்லை.
-
எளிய மற்றும் வெளிப்படையான குறியீடு: இந்த மெட்ரிக், நிச்சயமாக, அகநிலை, ஆனால் அது முக்கியமானது.
-
நூல் பாதுகாப்பு: பல திரிக்கப்பட்ட சூழலில் சரியான செயல்பாடு.
-
பல-திரிக்கப்பட்ட சூழலில் உயர் செயல்திறன்: வளத்தைப் பகிரும் போது சிறிய அல்லது நூல் தடை இல்லை.
-
சோம்பேறி துவக்கம் இல்லை: பயன்பாடு தொடங்கும் போது வகுப்பு ஏற்றப்படும் போது, அது தேவையா இல்லையா என்பதைப் பொருட்படுத்தாமல் (முரண்பாடாக, IT உலகில் சோம்பேறியாக இருப்பது நல்லது)
-
சிக்கலான மற்றும் படிக்க கடினமான குறியீடு. இந்த அளவீடும் அகநிலை ஆகும். உங்கள் கண்களில் இரத்தம் வர ஆரம்பித்தால், செயல்படுத்துவது சிறந்தது அல்ல என்று நாங்கள் கருதுவோம்.
-
நூல் பாதுகாப்பு இல்லாமை. வேறு வார்த்தைகளில் கூறுவதானால், "நூல் ஆபத்து". பல திரிக்கப்பட்ட சூழலில் தவறான செயல்பாடு.
-
பல-திரிக்கப்பட்ட சூழலில் மோசமான செயல்திறன்: ஒரு ஆதாரத்தைப் பகிரும்போது எல்லா நேரத்திலும் அல்லது அடிக்கடி த்ரெட்கள் ஒன்றையொன்று தடுக்கின்றன.
குறியீடு
இப்போது நாங்கள் பல்வேறு செயல்படுத்தல் விருப்பங்களைக் கருத்தில் கொண்டு நன்மை தீமைகளைக் குறிப்பிடத் தயாராக உள்ளோம்:எளிமையானது
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;
}
}
நன்மை:
-
சோம்பேறி துவக்கம்.
-
நூல் பாதுகாப்பு
-
மோசமான மல்டித்ரெட் செயல்திறன்
இருமுறை சரிபார்க்கப்பட்ட பூட்டுதல்
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 ஐ உருவாக்கும் .
செயல்படுத்தல் | சோம்பேறி துவக்கம் | நூல் பாதுகாப்பு | மல்டித்ரெட் செயல்திறன் | எப்போது பயன்படுத்த வேண்டும்? |
---|---|---|---|---|
எளிமையானது | - | + | வேகமாக | ஒருபோதும் இல்லை. அல்லது சோம்பேறி துவக்கம் முக்கியமில்லாத போது. ஆனால் ஒருபோதும் சிறப்பாக இருக்காது. |
சோம்பேறி துவக்கம் | + | - | பொருந்தாது | மல்டித்ரெடிங் தேவைப்படாதபோது எப்போதும் |
ஒத்திசைக்கப்பட்ட அணுகல் | + | + | மெதுவாக | ஒருபோதும் இல்லை. அல்லது மல்டித்ரெட் செயல்திறன் ஒரு பொருட்டல்ல. ஆனால் ஒருபோதும் சிறப்பாக இருக்காது. |
இருமுறை சரிபார்க்கப்பட்ட பூட்டுதல் | + | + | வேகமாக | அரிதான சந்தர்ப்பங்களில் சிங்கிள்டனை உருவாக்கும் போது விதிவிலக்குகளைக் கையாள வேண்டியிருக்கும் போது (வகுப்பு வைத்திருப்பவர் சிங்கிள்டன் பொருந்தாதபோது) |
வகுப்பு வைத்திருப்பவர் | + | + | வேகமாக | மல்டித்ரெடிங் தேவைப்படும் போதெல்லாம், சிங்கிள்டன் பொருள் சிக்கல்கள் இல்லாமல் உருவாக்கப்படும் என்ற உத்தரவாதம் உள்ளது. |
சிங்கிள்டன் வடிவத்தின் நன்மை தீமைகள்
பொதுவாக, ஒரு சிங்கிள்டன் எதிர்பார்க்கப்படுவதைச் சரியாகச் செய்கிறது:-
வகுப்பின் ஒரே ஒரு நிகழ்வு மட்டுமே இருக்கும் என்று இது உத்தரவாதம் அளிக்கிறது.
-
அந்த நிகழ்விற்கான உலகளாவிய அணுகலின் ஒரு புள்ளியை இது வழங்குகிறது.
-
ஒரு சிங்கிள்டன் ஒற்றை பொறுப்புக் கொள்கையை மீறுகிறது: அதன் நேரடி கடமைகளுக்கு கூடுதலாக, சிங்கிள்டன் வகுப்பு நிகழ்வுகளின் எண்ணிக்கையையும் கட்டுப்படுத்துகிறது.
-
ஒரு சாதாரண வர்க்கம் ஒரு சிங்கிள்டனைச் சார்ந்திருப்பது வகுப்பின் பொது ஒப்பந்தத்தில் தெரிவதில்லை.
-
உலகளாவிய மாறிகள் மோசமானவை. இறுதியில், ஒரு சிங்கிள்டன் ஒரு மிகப்பெரிய உலகளாவிய மாறியாக மாறுகிறது.
-
ஒரு சிங்கிள்டனின் இருப்பு பயன்பாட்டின் முழுமை மற்றும் குறிப்பாக சிங்கிள்டனைப் பயன்படுத்தும் வகுப்புகளின் சோதனைத் திறனைக் குறைக்கிறது.
GO TO FULL VERSION