நீங்கள் சமீபத்தில் சிங்கிள்டன் டிசைன் பேட்டர்ன் , ஜாவாவில் அதை எவ்வாறு செயல்படுத்துவது மற்றும் அது எதற்காக என்பதை ஆராய்ந்தீர்கள். ஆனால் ஜாவா அதன் சொந்த சிங்கிள்டனுடன் வருகிறது என்று நான் சொன்னால் என்ன செய்வது? ஆர்வமா? பிறகு உள்ளே நுழைவோம்.

எனும் வகுப்பைப் பற்றி நீங்கள் ஏற்கனவே அறிந்திருக்கலாம் . நீங்கள் அறிந்திருக்க வேண்டிய ஒரு சிறப்பு அம்சம் உள்ளது. குறிப்பாக, எனம் சிங்கிள்டன் வடிவமைப்பு முறையை செயல்படுத்துகிறது. இந்த விருப்பம் ஒரு பொதுத் துறையை உள்ளடக்கிய சிங்கிள்டன் அணுகுமுறையைப் போலவே உள்ளது .

என சிங்கிள்டன்:


public enum Device {   
    PRINTER	
} 
    

ஒரு பொது மாறியாக சிங்கிள்டன்:


public class Printer {   
    public static final Printer PRINTER = new Printer();   
    private Printer() {
    }
//…
}
    

பொதுக் கள அணுகுமுறையை விட enum அணுகுமுறை மிகவும் கச்சிதமானது, ஏனென்றால் நாம் சொந்தமாக செயல்படுத்த வேண்டியதில்லை . மிக முக்கியமாக, enums வரிசைப்படுத்துவதில் எந்த பிரச்சனையும் இல்லை.

enums வரிசைப்படுத்தல் சாதாரண பொருள்களை விட வித்தியாசமாக செயல்படுகிறது: enum பெயரின் மதிப்பு மட்டுமே வரிசைப்படுத்தப்படுகிறது. டீரியலைசேஷன் போது, ​​ஒரு உதாரணத்தைப் பெற, டீரியலைஸ் செய்யப்பட்ட பெயருடன் இந்த முறை பயன்படுத்தப்படுகிறது. கூடுதலாக, enum உங்களை பிரதிபலிப்பு தாக்குதல்களில் இருந்து பாதுகாக்கும் .

இரண்டாவது தொகுதியில் உள்ள பாடங்களில் பிரதிபலிப்பு பற்றி மேலும் அறிந்து கொள்வீர்கள், அங்கு நாங்கள் பிரதிபலிப்பு API ஐ ஆராய்வோம் .

கன்ஸ்ட்ரக்டர் கிளாஸின் புதிய இன்ஸ்டன்ஸ் முறையை செயல்படுத்துவதில் சுடப்படும் ஒரு வரம்பு உடனடி எண்ணங்களை ஜாவா தடை செய்கிறது , இது பிரதிபலிப்பு மூலம் பொருட்களை உருவாக்கும் போது அடிக்கடி அழைக்கப்படுகிறது.

Constructor.newInstance இலிருந்து குறியீட்டின் பகுதி . ஒரு எண்ணை உருவாக்க பயன்படுகிறது :


if ((clazz.getModifiers() & Modifier.ENUM) != 0)
    throw new IllegalArgumentException("Cannot reflectively create enum objects");
    

ஒரு சிங்கிள்டனை உருவாக்க ஒரு enum ஐப் பயன்படுத்துவதன் தீமைகள் பின்வருமாறு:

  • சோம்பேறி துவக்கம் இல்லாததால், பொருள் உடனடியாக உருவாக்கப்பட்டு, துவக்கத்தை தாமதப்படுத்த முடியாது.

  • மற்ற வகுப்புகளை நீட்டிக்க முடியாது. அதாவது, நீங்கள் மற்றொரு வகுப்பைப் பெற வேண்டிய சந்தர்ப்பங்களில், ஒரு enum ஐ சிங்கிள்டனாகப் பயன்படுத்துவது வேலை செய்யாது. இதுபோன்ற சந்தர்ப்பங்களில், ஏற்கனவே நமக்குத் தெரிந்த பிற செயலாக்க விருப்பங்களுக்கு நாம் திரும்ப வேண்டும்: நிலையான முறை அல்லது பொது மாறி.

  • enum ஐ சிங்கிள்டனாகப் பயன்படுத்தும் போது, ​​நீங்கள் ஒரு enum புலத்தை மட்டுமே பயன்படுத்த முடியும்.


public enum Device extends Electricity { 
    PRINTER 
}
    

இந்தக் குறியீடு நமக்குத் தொகுத்தல் பிழையைத் தரும்:

enum க்கு நீட்டிப்பு விதி அனுமதிக்கப்படவில்லை

ஆனால் நாம் ஒரு இடைமுகத்தை செயல்படுத்த வேண்டும் என்றால், எந்த பிரச்சனையும் இல்லை, ஏனெனில் enum இடைமுகங்களை செயல்படுத்த முடியும்:


public enum Device implements Electricity { 
    PRINTER 
}
    

நீங்கள் மரபுரிமையைப் பயன்படுத்தத் தேவையில்லை என்றால், enum வழியாக ஒற்றைப் பட்டையை செயல்படுத்துவது சிறந்தது . இதைப் பரிந்துரைப்பதில் நாங்கள் தனியாக இல்லை - ஜோசுவா ப்ளாச் அவர்களும் இதைச் செய்கிறார் .

இந்த செயலாக்க அணுகுமுறை உங்களுக்கு வசதி, கச்சிதமான தன்மை, வரிசைப்படுத்தல், பிரதிபலிப்பு தாக்குதல்களில் இருந்து பாதுகாப்பு மற்றும் தனித்துவம் - ஒரு நல்ல சிங்கிள்டனுக்குத் தேவையான அனைத்தையும் வழங்குகிறது!