இந்தக் கட்டுரை, முதன்முறையாக, டிசைன் பேட்டர்ன்கள் என்ற கருத்தை எதிர்கொள்ளும், சிங்கிள்டன் என்ற சொல்லைக் கேள்விப்பட்ட அல்லது சிங்கிள்டன் பேட்டர்னை எப்படியாவது செயல்படுத்தினாலும், என்ன நடக்கிறது என்று புரியாத எவரையும் இலக்காகக் கொண்டது. வரவேற்பு! கோட்ஜிம் மாணவர்கள் லெவல் 15 இல் முதல் முறையாக வடிவமைப்பு வடிவங்களை எதிர்கொள்கின்றனர், அப்போது கேப்டன் எதிர்பாராதவிதமாக ஜாவா சிங்கிள்டன் பேட்டர்னை சோம்பேறியாக செயல்படுத்துவதன் மூலம் அவர்களின் புரிதலை "வலுப்படுத்த" கேட்கிறார். சிங்கிள்டன் பேட்டர்னைப் பற்றி முதன்முறையாகக் கேட்கும் மாணவர்களுக்கு உடனடியாக நிறைய கேள்விகள் எழுகின்றன: உலகில் வடிவமைப்பு முறை என்றால் என்ன? நமக்கு அது ஏன் தேவை? சிங்கிள்டன் என்றால் என்ன ? இறுதியாக, சோம்பேறியான செயல்படுத்தல் என்றால் என்ன? இந்த கேள்விகளுக்கு வரிசையில் பதிலளிப்போம்.
உலகில் வடிவமைப்பு முறை என்ன?
இந்த கேள்விக்கு சிறந்த புரிதலுடன் பதிலளிக்க ஒரு சிறிய வரலாறு உள்ளது என்று நான் நம்புகிறேன். நான்கு பிரபலமான நிரலாக்க ஆசிரியர்கள் (எரிச் காமா, ஜான் விலிசைட்ஸ், ரால்ப் ஜான்சன் மற்றும் ரிச்சர்ட் ஹெல்ம்) ஒரு சுவாரஸ்யமான யோசனையுடன் வந்தனர். மென்பொருள் மேம்பாட்டிற்கு அவர்கள் ஏறக்குறைய ஒரே மாதிரியான சிக்கல்களைத் தீர்க்க வேண்டும் மற்றும் அதே வழியில் குறியீட்டை எழுத வேண்டும் என்று அவர்கள் கவனித்தனர். எனவே அவர்கள் பெரும்பாலும் பொருள் சார்ந்த நிரலாக்கத்தில் பயன்படுத்த வேண்டிய பொதுவான வடிவங்களை விவரிக்க முடிவு செய்தனர். அவர்களின் புத்தகம் 1994 இல் வடிவமைப்பு வடிவங்கள்: மீண்டும் பயன்படுத்தக்கூடிய பொருள் சார்ந்த மென்பொருளின் கூறுகள் என்ற தலைப்பில் வெளியிடப்பட்டது. புத்தகத்தின் பெயர் மிக நீண்டதாக மாறியது மற்றும் மக்கள் அதை நான்கு கும்பல் புத்தகம் என்று அழைக்கத் தொடங்கினர். முதல் பதிப்பில் 23 வடிவங்கள் இருந்தன. பின்னர், டஜன் கணக்கான பிற வடிவங்கள் கண்டுபிடிக்கப்பட்டன.
வடிவமைப்பு முறை என்பது பொதுவான பிரச்சனைக்கு தரப்படுத்தப்பட்ட தீர்வாகும்.
மற்றும் சிங்கிள்டன் முறை அவற்றில் ஒன்று.
நமக்கு ஏன் வடிவமைப்பு வடிவங்கள் தேவை?
நீங்கள் வடிவங்களை அறியாமல் நிரல் செய்யலாம்: எல்லாவற்றிற்கும் மேலாக, நிலை 15 இல், நீங்கள் ஏற்கனவே கோட்ஜிம்மில் நூற்றுக்கணக்கான சிறு-நிரல்கள் உள்ளன என்பதை அறியாமல் எழுதிவிட்டீர்கள். வடிவமைப்பு வடிவங்கள் என்பது ஒரு வகையான கருவியாகும், அதன் பயன்பாடு மாஸ்டரை அமெச்சூரிலிருந்து வேறுபடுத்துகிறது: வடிவமைப்பு வடிவங்கள் ஒரு பொதுவான சிக்கலை எவ்வாறு சரியாகத் தீர்ப்பது என்பதை விவரிக்கிறது. முறைகளை அறிந்துகொள்வது உங்கள் நேரத்தை மிச்சப்படுத்துகிறது என்பதே இதன் பொருள். அந்த வகையில், அவை அல்காரிதம்களைப் போலவே இருக்கும்.
எடுத்துக்காட்டாக, பிளாக் ஜாக் மற்றும் எண்களைக் கொண்டு உங்கள் சொந்த வரிசையாக்க வழிமுறையை நீங்கள் உருவாக்கலாம்அவ்வாறு செய்ய நிறைய நேரம் செலவிடுங்கள் அல்லது நீண்ட காலமாக புரிந்து கொள்ளப்பட்டு விவரிக்கப்பட்ட ஒன்றை நீங்கள் செயல்படுத்தலாம். வடிவமைப்பு வடிவங்களிலும் இதுவே உண்மை. கூடுதலாக, வடிவமைப்பு வடிவங்களுடன், குறியீடு மிகவும் நிலையானதாகிறது, மேலும் பொருத்தமான வடிவத்தைப் பயன்படுத்தும் போது, நீங்கள் தவறுகளைச் செய்வதற்கான வாய்ப்புகள் குறைவு, ஏனெனில் வடிவத்தின் பொதுவான குறைபாடுகள் நீண்ட காலத்திற்கு முன்பே அடையாளம் காணப்பட்டு அகற்றப்பட்டன. எல்லாவற்றிற்கும் மேலாக, வடிவங்களைப் பற்றிய அறிவு புரோகிராமர்கள் ஒருவரையொருவர் நன்கு புரிந்துகொள்ள உதவுகிறது. உங்கள் சக புரோகிராமர்களுக்கு ஒரு நீண்ட விளக்கத்தை வழங்க முயற்சிப்பதற்குப் பதிலாக ஒரு வடிவத்தின் பெயரைச் சொல்லலாம். சுருக்கமாக, வடிவமைப்பு வடிவங்கள் உங்களுக்கு உதவுகின்றன:
சக்கரத்தை மீண்டும் கண்டுபிடிக்கவில்லை, மாறாக நிலையான தீர்வுகளைப் பயன்படுத்துங்கள்;
குறியீட்டை தரப்படுத்தவும்;
சொற்களஞ்சியத்தை தரப்படுத்துதல்;
இந்த பகுதியை முடிக்க, வடிவமைப்பு வடிவங்களின் முழு உடலையும் மூன்று பெரிய குழுக்களாகப் பிரிக்கலாம் என்பதை நாங்கள் கவனிக்கிறோம்:
இறுதியாக, சிங்கிள்டன் முறை
சிங்கிள்டன் ஒரு படைப்பு முறை . இந்த முறை ஒரு வகுப்பின் ஒரு நிகழ்வு மட்டுமே இருப்பதை உறுதிசெய்கிறது மற்றும் இந்த பொருளுக்கு உலகளாவிய அணுகல் புள்ளியை வழங்குகிறது. விளக்கத்திலிருந்து, இந்த முறை இரண்டு நிகழ்வுகளில் பயன்படுத்தப்பட வேண்டும் என்பது தெளிவாக இருக்க வேண்டும்:
உங்கள் நிரலுக்கு ஒரு குறிப்பிட்ட வகுப்பின் ஒன்றுக்கு மேற்பட்ட பொருள்கள் உருவாக்கப்படக் கூடாது. எடுத்துக்காட்டாக, ஒரு கணினி விளையாட்டில் ஹீரோ வகுப்பையும், கேமில் உள்ள ஒரே ஹீரோவை விவரிக்கும் ஒரே ஒரு ஹீரோ பொருளையும் கொண்டிருக்கலாம்.
ஒரு பொருளுக்கு உலகளாவிய அணுகலுக்கான புள்ளியை நீங்கள் வழங்க வேண்டியிருக்கும் போது. வேறு வார்த்தைகளில் கூறுவதானால், நிரலில் எங்கிருந்தும் பொருளைக் கிடைக்கச் செய்ய வேண்டும். ஐயோ, ஒரு உலகளாவிய மாறியை உருவாக்குவது போதாது, ஏனெனில் அது எழுத-பாதுகாக்கப்படவில்லை: மாறியின் மதிப்பை யார் வேண்டுமானாலும் மாற்றலாம், எனவே பொருளின் உலகளாவிய அணுகல் புள்ளி இழக்கப்படலாம். சிங்கிள்டனின் இந்த பண்புகள் அவசியம், எடுத்துக்காட்டாக, தரவுத்தளத்துடன் செயல்படும் ஒரு பொருள் உங்களிடம் இருக்கும்போது, நீங்கள் நிரலின் வெவ்வேறு பகுதிகளிலிருந்து தரவுத்தளத்தை அணுக வேண்டும். முன்பு உருவாக்கப்பட்ட நிகழ்வை மாற்றியமைக்கும் குறியீட்டை யாரும் எழுதுவதில்லை என்பதை ஒரு சிங்கிள்டன் உறுதி செய்யும்.
எனவே ஒரு சிங்கிள்டன் இந்த இரண்டு தேவைகளையும் பூர்த்தி செய்தார்: திட்டத்தில் ஒரு குறிப்பிட்ட வகையான பொருளில் ஒன்று மட்டுமே இருக்க வேண்டும் மற்றும் அதற்கு உலகளாவிய அணுகல் இருக்க வேண்டும். நிலை 15 இல் உள்ள எடுத்துக்காட்டில், பின்வரும் பணிக்கு இந்த முறையைச் செயல்படுத்த கேப்டன் உங்களிடம் கேட்கிறார்:
5.1 கன்சோலில் இருந்து ஒரு சரம் அளவுருவைப் படிக்கவும்
5.2 அளவுரு ஒன்று சமமாக இருந்தால்கிரகம்இடைமுகத்தின் மாறிலிகள், பொருத்தமான thePlanet object ஐ உருவாக்கவும்.
பணி நிலைமைகளை கவனமாகப் படித்த பிறகு, இங்கே ஏன் ஒரு சிங்கிள்டன் தேவை என்பதை நாம் தெளிவாகக் காணலாம் . உண்மையில், பின்வரும் வகுப்புகள் ஒவ்வொன்றிற்கும் ஒரு உதாரணத்தை உருவாக்குமாறு கேட்கப்படுகிறோம்: சூரியன் , சந்திரன் , பூமி . நாம் ஒன்றுக்கு மேற்பட்ட சூரியன்/சந்திரன்/பூமியை உருவாக்கக்கூடாது என்று கருதுவது அர்த்தமுள்ளதாக இருக்கிறது. இல்லையெனில், உங்கள் ஸ்டார் வார்ஸின் பதிப்பை நீங்கள் எழுதும் வரை, நாங்கள் ஒரு அபத்தமான சூழ்நிலைக்கு வருவோம். ஜாவாவில் சிங்கிள்டன் வடிவத்தை மூன்று படிகளில் செயல்படுத்துதல் ஜாவாவில், சிங்கிள்டன் நடத்தையை ஒரு சாதாரண கட்டமைப்பாளரைப் பயன்படுத்தி செயல்படுத்த முடியாது, ஏனெனில் ஒரு கட்டமைப்பாளர் எப்போதும் ஒரு புதிய பொருளைத் திருப்பித் தருகிறார். எனவே, சிங்கிள்டனின் அனைத்து செயலாக்கங்களும்கன்ஸ்ட்ரக்டரை மறைத்து, சிங்கிள்டன் பொருளின் வாழ்நாளைக் கட்டுப்படுத்தும் பொது நிலையான முறையை உருவாக்கி, புதிதாக தோன்றும் அனைத்து பொருட்களையும் "அழித்தல்". ஒரு சிங்கிள்டனை அணுகினால், அது ஒரு புதிய பொருளை உருவாக்க வேண்டும் (நிரலில் ஏற்கனவே இல்லை என்றால்), அல்லது ஏற்கனவே உள்ள ஒன்றைத் திருப்பி அனுப்ப வேண்டும். இதை நிறைவேற்ற:
ஒரு பொருளைச் சேமிக்கும் ஒரு தனிப்பட்ட நிலையான புலத்தை வகுப்பிற்கு நீங்கள் கொடுக்க வேண்டும்:
சிங்கிள்டனைப் பெறப் பயன்படுத்தப்படும் நிலையான உருவாக்க முறையை அறிவிக்கவும்:
publicclassLazyInitializedSingleton{privatestaticLazyInitializedSingleton instance;privateLazyInitializedSingleton(){}publicstaticLazyInitializedSingletongetInstance(){// #3if(instance ==null){// If the object has not yet been created
instance =newLazyInitializedSingleton();// Create a new object}return instance;// Return the previously created object}}
மேலே உள்ள உதாரணம் சற்றே விகாரமானது, ஏனென்றால் நாம் கட்டமைப்பாளரை மறைத்து, நிலையான கட்டமைப்பாளருக்குப் பதிலாக எங்கள் சொந்த முறையை வழங்குகிறோம். இந்தக் கட்டுரை, CodeGym மாணவர்கள் இந்த வடிவத்துடன் (பொதுவாக வடிவமைப்பு வடிவங்களுடன்) தொடர்பு கொள்வதை உறுதி செய்வதை நோக்கமாகக் கொண்டிருப்பதால், மிகவும் சிக்கலான சிங்கிள்டன் செயலாக்கங்களின் நுணுக்கங்கள் இங்கு விவரிக்கப்படாது. நிரலின் சிக்கலைப் பொறுத்து, இந்த முறை மேலும் செம்மைப்படுத்தப்பட வேண்டும் என்பதை மட்டுமே நாங்கள் கவனிக்கிறோம். எடுத்துக்காட்டாக, மல்டித்ரெட் செய்யப்பட்ட சூழலில் (த்ரெட்களைப் பற்றிய கட்டுரைகளைப் பார்க்கவும்), பல்வேறு திரிகள் ஒரே நேரத்தில் சிங்கிள்டன் முறையை அணுகலாம், மேலும் மேலே விவரிக்கப்பட்ட குறியீடு வேலை செய்வதை நிறுத்தும், ஏனெனில் ஒவ்வொரு தனித் தொடரும் வகுப்பின் நிகழ்வை உருவாக்கலாம். இதன் விளைவாக, சரியான நூல்-பாதுகாப்பான சிங்கிள்டன்களை உருவாக்க இன்னும் பல்வேறு அணுகுமுறைகள் உள்ளன. ஆனால் அது வேறு கதை =)
இறுதியாக... கேப்டன் கேட்ட இந்த சோம்பேறி இனிஷியலைசேஷன் என்ன?
சோம்பேறி துவக்கம் ஒத்திவைக்கப்பட்ட துவக்கம் என்றும் அழைக்கப்படுகிறது. இது நிரலாக்க தந்திரமாகும், அங்கு ஒரு வள-தீவிர செயல்பாடு (மற்றும் ஒரு பொருளை உருவாக்குவது ஒரு வள-தீவிர செயல்பாடு) முன்கூட்டியே அல்ல. எங்கள் சிங்கிள்டன் ஜாவா குறியீட்டில் உண்மையில் என்ன நடக்கிறது ? வேறு வார்த்தைகளில் கூறுவதானால், எங்கள் பொருள் அதை அணுகும் நேரத்தில் உருவாக்கப்பட்டது, முன்கூட்டியே அல்ல. சோம்பேறியான துவக்கம் எப்படியோ சிங்கிள்டன் மாதிரியுடன் கடுமையாக இணைக்கப்பட்டுள்ளது என்று நீங்கள் கருதக்கூடாது . ப்ராக்ஸி மற்றும் தொழிற்சாலை முறை போன்ற பிற படைப்பு வடிவமைப்பு வடிவங்களிலும் சோம்பேறி துவக்கம் பயன்படுத்தப்படுகிறது, ஆனால் இதுவும் மற்றொரு கதை =)