CodeGym /జావా కోర్సు /మాడ్యూల్ 1 /ఎనమ్ గా సింగిల్టన్

ఎనమ్ గా సింగిల్టన్

మాడ్యూల్ 1
స్థాయి , పాఠం
అందుబాటులో ఉంది

మీరు ఇటీవల సింగిల్‌టన్ డిజైన్ నమూనా , జావాలో దీన్ని ఎలా అమలు చేయాలి మరియు అది దేని కోసం అనే అంశాలను పరిశీలించారు. జావా దాని స్వంత సింగిల్‌టన్‌తో వస్తుంది అని నేను మీకు చెబితే ఏమి చేయాలి? ఆసక్తిగా ఉందా? అప్పుడు డైవ్ చేద్దాం.

ఎనమ్ క్లాస్ గురించి మీకు ఇప్పటికే తెలిసి ఉండవచ్చు . ఇది మీరు తెలుసుకోవలసిన ప్రత్యేక లక్షణాన్ని కలిగి ఉంది. ప్రత్యేకంగా, ఎనమ్ సింగిల్టన్ డిజైన్ నమూనాను అమలు చేస్తుంది. ఈ ఐచ్ఛికం దాదాపు పబ్లిక్ ఫీల్డ్‌తో కూడిన సింగిల్‌టన్ విధానం వలె ఉంటుంది .

ఎనమ్‌గా సింగిల్టన్:


public enum Device {   
    PRINTER	
} 
    

పబ్లిక్ వేరియబుల్‌గా సింగిల్టన్:


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

పబ్లిక్-ఫీల్డ్ విధానం కంటే enum విధానం మరింత కాంపాక్ట్, ఎందుకంటే మన స్వంత అమలును వ్రాయవలసిన అవసరం లేదు. మరీ ముఖ్యంగా, సీరియలైజేషన్‌తో ఎనమ్‌లకు ఎటువంటి సమస్యలు లేవు.

enums యొక్క సీరియలైజేషన్ సాధారణ వస్తువుల కంటే భిన్నంగా పనిచేస్తుంది: enum పేరు యొక్క విలువ మాత్రమే క్రమీకరించబడింది. డీరియలైజేషన్ సమయంలో, ఒక ఉదాహరణను పొందడానికి డీరియలైజ్డ్ పేరుతో పద్ధతి ఉపయోగించబడుతుంది. అదనంగా, enum ప్రతిబింబ దాడుల నుండి మిమ్మల్ని రక్షించగలదు .

మీరు రెండవ మాడ్యూల్‌లోని పాఠాలలో ప్రతిబింబం గురించి మరింత తెలుసుకుంటారు, ఇక్కడ మేము రిఫ్లెక్షన్ APIని అన్వేషిస్తాము .

జావా ఇన్‌స్టంటియేటింగ్ ఎన్‌యుమ్‌లను నిషేధిస్తుంది- కన్‌స్ట్రక్టర్ క్లాస్ యొక్క కొత్త ఇన్‌స్టాన్స్ పద్ధతిని అమలు చేయడంలో ఒక పరిమితి , ఇది ప్రతిబింబం ద్వారా వస్తువులను సృష్టించేటప్పుడు తరచుగా పిలువబడుతుంది.

Constructor.newInstance నుండి కోడ్ యొక్క సారాంశం . ఒక enum సృష్టించడానికి ఉపయోగిస్తారు :


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

సింగిల్‌టన్‌ను రూపొందించడానికి ఎనమ్‌ను ఉపయోగించడం వల్ల కలిగే నష్టాలు :

  • ఆబ్జెక్ట్ వెంటనే సృష్టించబడుతుంది మరియు ప్రారంభించడం ఆలస్యం కాదు కాబట్టి, సోమరితనం ప్రారంభించడం లేకపోవడం.

  • ఇతర తరగతులను పొడిగించడం సాధ్యం కాదు. అంటే, మీరు మరొక తరగతిని వారసత్వంగా పొందాల్సిన సందర్భాలలో, ఒక enumని సింగిల్‌టన్‌గా ఉపయోగించడం పని చేయదు . అటువంటి సందర్భాలలో, మనకు ఇప్పటికే తెలిసిన ఇతర అమలు ఎంపికల వైపు మళ్లాలి: స్టాటిక్ మెథడ్ లేదా పబ్లిక్ వేరియబుల్.

  • enumని సింగిల్‌టన్‌గా ఉపయోగిస్తున్నప్పుడు, మీరు ఒక enum ఫీల్డ్‌ను మాత్రమే ఉపయోగించగలరు .


public enum Device extends Electricity { 
    PRINTER 
}
    

ఈ కోడ్ మాకు కంపైలేషన్ లోపాన్ని ఇస్తుంది:

enum కోసం పొడిగింపు నిబంధన అనుమతించబడదు

కానీ మనం ఇంటర్‌ఫేస్‌ని అమలు చేయవలసి వస్తే, సమస్య లేదు, ఎందుకంటే enum ఇంటర్‌ఫేస్‌లను అమలు చేయగలదు:


public enum Device implements Electricity { 
    PRINTER 
}
    

మీరు వారసత్వాన్ని ఉపయోగించాల్సిన అవసరం లేకుంటే, enum ద్వారా సింగిల్‌టన్ నమూనాను అమలు చేయడం ఉత్తమం . దీన్ని సిఫార్సు చేయడంలో మేము ఒంటరిగా లేము - జాషువా బ్లాచ్ కూడా అలాగే చేస్తాడు .

ఈ అమలు విధానం మీకు సౌలభ్యం, కాంపాక్ట్‌నెస్, సీరియలైజేషన్ అవుట్ ఆఫ్ ది బాక్స్, రిఫ్లెక్షన్ అటాక్‌ల నుండి రక్షణ మరియు ప్రత్యేకతను అందిస్తుంది — మంచి సింగిల్‌టన్‌కి కావాల్సిన ప్రతిదీ!

వ్యాఖ్యలు
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION