CodeGym/Java Blog/சீரற்ற/ஜாவா சிங்கிள்டன் வகுப்பு
John Squirrels
நிலை 41
San Francisco

ஜாவா சிங்கிள்டன் வகுப்பு

சீரற்ற குழுவில் வெளியிடப்பட்டது
members
வணக்கம்! இன்று நாம் ஜாவா சிங்கிள்டன் பேட்டர்னில் தொடங்கி பல்வேறு டிசைன் பேட்டர்ன்களின் விவரங்களைப் பார்ப்போம். மதிப்பாய்வு செய்வோம்: பொதுவாக வடிவமைப்பு வடிவங்களைப் பற்றி நமக்கு என்ன தெரியும்? வடிவமைப்பு வடிவங்கள் பல அறியப்பட்ட சிக்கல்களைத் தீர்க்க நாம் பயன்படுத்தக்கூடிய சிறந்த நடைமுறைகளாகும். வடிவமைப்பு வடிவங்கள் பொதுவாக எந்த நிரலாக்க மொழியுடனும் பிணைக்கப்படவில்லை. தவறுகளைத் தவிர்க்கவும், சக்கரத்தை மீண்டும் கண்டுபிடிப்பதைத் தவிர்க்கவும் உதவும் பரிந்துரைகளின் தொகுப்பாக அவற்றை நினைத்துப் பாருங்கள்.வடிவமைப்பு வடிவங்கள்: சிங்கிள்டன் - 1

ஜாவாவில் சிங்கிள்டன் என்றால் என்ன?

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

  2. அந்த நிகழ்விற்கான உலகளாவிய அணுகலின் ஒரு புள்ளியை இது வழங்குகிறது.

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

  2. வகுப்பின் நிகழ்வை வழங்கும் பொது நிலையான முறை. இந்த முறை 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;
  }
}
நன்மை:
  • சோம்பேறி துவக்கம்.

  • நூல் பாதுகாப்பு

பாதகம்:
  • மோசமான மல்டித்ரெட் செயல்திறன்

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

இருமுறை சரிபார்க்கப்பட்ட பூட்டுதல்

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 பதிப்பிலிருந்து கொந்தளிப்பான முக்கிய வார்த்தையின் பயன்பாடு சரி செய்யப்பட்டது)

இந்த செயலாக்க விருப்பம் சரியாக வேலை செய்ய, இரண்டு நிபந்தனைகளில் ஒன்றை பூர்த்தி செய்ய வேண்டும். INSTANCE மாறியானது இறுதியானதாகவோ அல்லது நிலையற்றதாகவோ இருக்க வேண்டும் . இன்று நாம் விவாதிக்கும் கடைசி செயலாக்கம் கிளாஸ் ஹோல்டர் சிங்கிள்டன் .

வகுப்பு வைத்திருப்பவர்

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 ஐ உருவாக்கும் .

இந்த நடைமுறை கிட்டத்தட்ட சரியானது. இது சோம்பேறி, மற்றும் நூல் பாதுகாப்பானது மற்றும் வேகமானது. ஆனால் இது ஒரு நுணுக்கத்தைக் கொண்டுள்ளது, இது தீமைகளின் பட்டியலில் விளக்கப்பட்டுள்ளது. சிங்கிள்டன் வடிவத்தின் பல்வேறு செயலாக்கங்களின் ஒப்பீடு:
செயல்படுத்தல் சோம்பேறி துவக்கம் நூல் பாதுகாப்பு மல்டித்ரெட் செயல்திறன் எப்போது பயன்படுத்த வேண்டும்?
எளிமையானது - + வேகமாக ஒருபோதும் இல்லை. அல்லது சோம்பேறி துவக்கம் முக்கியமில்லாத போது. ஆனால் ஒருபோதும் சிறப்பாக இருக்காது.
சோம்பேறி துவக்கம் + - பொருந்தாது மல்டித்ரெடிங் தேவைப்படாதபோது எப்போதும்
ஒத்திசைக்கப்பட்ட அணுகல் + + மெதுவாக ஒருபோதும் இல்லை. அல்லது மல்டித்ரெட் செயல்திறன் ஒரு பொருட்டல்ல. ஆனால் ஒருபோதும் சிறப்பாக இருக்காது.
இருமுறை சரிபார்க்கப்பட்ட பூட்டுதல் + + வேகமாக அரிதான சந்தர்ப்பங்களில் சிங்கிள்டனை உருவாக்கும் போது விதிவிலக்குகளைக் கையாள வேண்டியிருக்கும் போது (வகுப்பு வைத்திருப்பவர் சிங்கிள்டன் பொருந்தாதபோது)
வகுப்பு வைத்திருப்பவர் + + வேகமாக மல்டித்ரெடிங் தேவைப்படும் போதெல்லாம், சிங்கிள்டன் பொருள் சிக்கல்கள் இல்லாமல் உருவாக்கப்படும் என்ற உத்தரவாதம் உள்ளது.

சிங்கிள்டன் வடிவத்தின் நன்மை தீமைகள்

பொதுவாக, ஒரு சிங்கிள்டன் எதிர்பார்க்கப்படுவதைச் சரியாகச் செய்கிறது:
  1. வகுப்பின் ஒரே ஒரு நிகழ்வு மட்டுமே இருக்கும் என்று இது உத்தரவாதம் அளிக்கிறது.

  2. அந்த நிகழ்விற்கான உலகளாவிய அணுகலின் ஒரு புள்ளியை இது வழங்குகிறது.

இருப்பினும், இந்த முறை குறைபாடுகளைக் கொண்டுள்ளது:
  1. ஒரு சிங்கிள்டன் ஒற்றை பொறுப்புக் கொள்கையை மீறுகிறது: அதன் நேரடி கடமைகளுக்கு கூடுதலாக, சிங்கிள்டன் வகுப்பு நிகழ்வுகளின் எண்ணிக்கையையும் கட்டுப்படுத்துகிறது.

  2. ஒரு சாதாரண வர்க்கம் ஒரு சிங்கிள்டனைச் சார்ந்திருப்பது வகுப்பின் பொது ஒப்பந்தத்தில் தெரிவதில்லை.

  3. உலகளாவிய மாறிகள் மோசமானவை. இறுதியில், ஒரு சிங்கிள்டன் ஒரு மிகப்பெரிய உலகளாவிய மாறியாக மாறுகிறது.

  4. ஒரு சிங்கிள்டனின் இருப்பு பயன்பாட்டின் முழுமை மற்றும் குறிப்பாக சிங்கிள்டனைப் பயன்படுத்தும் வகுப்புகளின் சோதனைத் திறனைக் குறைக்கிறது.

அவ்வளவுதான்! :) உங்களுடன் ஜாவா சிங்கிள்டன் வகுப்பை ஆராய்ந்தோம். இப்போது, ​​உங்கள் வாழ்நாள் முழுவதும், உங்கள் ப்ரோக்ராமர் நண்பர்களுடன் உரையாடும் போது, ​​பேட்டர்ன் எவ்வளவு நன்றாக இருக்கிறது என்பதை மட்டும் குறிப்பிடாமல், அதை மோசமாக்குவது பற்றி சில வார்த்தைகளையும் குறிப்பிடலாம். இந்த புதிய அறிவில் தேர்ச்சி பெற வாழ்த்துக்கள்.

கூடுதல் வாசிப்பு:

கருத்துக்கள்
  • பிரபலமானவை
  • புதியவை
  • பழையவை
ஒரு கருத்தைத் தெரிவிக்க நீங்கள் உள்நுழைந்திருக்க வேண்டும்
இந்தப் பக்கத்தில் இதுவரை எந்தக் கருத்தும் வழங்கப்படவில்லை