ÀÖÓãµç¾º


½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

µ¥ÀýģʽµÄʵÏÖ·½Ê½ÓÐÄÄЩ£¿

¸üÐÂʱ¼ä:2021Äê08ÔÂ19ÈÕ16ʱ33·Ö À´Ô´:ÀÖÓãµç¾º ä¯ÀÀ´ÎÊý:

µ¥Àýģʽ(Singleton Pattern)ÊÇJavaÖÐ×î¼òµ¥µÄÉè¼ÆÄ£Ê½Ö®Ò»¡£ÕâÖÖÀàÐ͵ÄÉè¼ÆÄ£Ê½ÊôÓÚ´´½¨ÐÍģʽ£¬ËüÌṩÁËÒ»ÖÖ´´½¨¶ÔÏóµÄ×î¼Ñ·½Ê½¡£

ÕâÖÖÄ£Ê½Éæ¼°µ½Ò»¸öµ¥Ò»µÄÀ࣬¸ÃÀฺÔð´´½¨×Ô¼ºµÄ¶ÔÏó£¬Í¬Ê±È·±£Ö»Óе¥¸ö¶ÔÏó±»´´½¨¡£Õâ¸öÀàÌṩÁËÒ»ÖÖ·ÃÎÊÆäΨһµÄ¶ÔÏóµÄ·½Ê½£¬¿ÉÒÔÖ±½Ó·ÃÎÊ£¬²»ÐèҪʵÀý»¯¸ÃÀàµÄ¶ÔÏó¡£


1.µ¥ÀýģʽµÄ½á¹¹

µ¥ÀýģʽµÄÖ÷ÒªÓÐÒÔϽÇÉ«£º

·µ¥ÀýÀà¡£Ö»ÄÜ´´½¨Ò»¸öʵÀýµÄÀà

··ÃÎÊÀࡣʹÓõ¥ÀýÀà


2. µ¥ÀýģʽµÄʵÏÖ

µ¥ÀýÉè¼ÆÄ£Ê½·ÖÀàÁ½ÖÖ£º

¶öººÊ½£ºÀà¼ÓÔØ¾Í»áµ¼Ö¸õ¥ÊµÀý¶ÔÏó±»´´½¨

ÀÁººÊ½£ºÀà¼ÓÔØ²»»áµ¼Ö¸õ¥ÊµÀý¶ÔÏó±»´´½¨£¬¶øÊÇÊ×´ÎʹÓøöÔÏóʱ²Å»á´´½¨


2.1 ¶öººÊ½-·½Ê½1(¾²Ì¬±äÁ¿·½Ê½)

/**
 * ¶öººÊ½
 *      ¾²Ì¬±äÁ¿´´½¨ÀàµÄ¶ÔÏó
 */
public class Singleton {
    //˽Óй¹Ôì·½·¨
    private Singleton() {}

    //ÔÚ³ÉԱλÖô´½¨¸ÃÀàµÄ¶ÔÏó
    private static Singleton instance = new Singleton();

    //¶ÔÍâÌṩ¾²Ì¬·½·¨»ñÈ¡¸Ã¶ÔÏó
    public static Singleton getInstance() {
        return instance;
    }
}

˵Ã÷£º

¸Ã·½Ê½ÔÚ³ÉԱλÖÃÉùÃ÷SingletonÀàÐ͵ľ²Ì¬±äÁ¿£¬²¢´´½¨SingletonÀàµÄ¶ÔÏóinstance¡£instance¶ÔÏóÊÇËæ×ÅÀàµÄ¼ÓÔØ¶ø´´½¨µÄ¡£Èç¹û¸Ã¶ÔÏó×ã¹»´óµÄ»°£¬¶øÒ»Ö±Ã»ÓÐʹÓþͻáÔì³ÉÄÚ´æµÄÀË·Ñ¡£


2.2 ¶öººÊ½-·½Ê½2(¾²Ì¬´úÂë¿é·½Ê½)

/**
 * ¶ñººÊ½
 *      ÔÚ¾²Ì¬´úÂë¿éÖд´½¨¸ÃÀà¶ÔÏó
 */
public class Singleton {

    //˽Óй¹Ôì·½·¨
    private Singleton() {}

    //ÔÚ³ÉԱλÖô´½¨¸ÃÀàµÄ¶ÔÏó
    private static Singleton instance;

    static {
        instance = new Singleton();
    }

    //¶ÔÍâÌṩ¾²Ì¬·½·¨»ñÈ¡¸Ã¶ÔÏó
    public static Singleton getInstance() {
        return instance;
    }
}

˵Ã÷£º

¸Ã·½Ê½ÔÚ³ÉԱλÖÃÉùÃ÷SingletonÀàÐ͵ľ²Ì¬±äÁ¿£¬¶ø¶ÔÏóµÄ´´½¨ÊÇÔÚ¾²Ì¬´úÂë¿éÖУ¬Ò²ÊǶÔ×ÅÀàµÄ¼ÓÔØ¶ø´´½¨¡£ËùÒԺͶöººÊ½µÄ·½Ê½1»ù±¾ÉÏÒ»Ñù£¬µ±È»¸Ã·½Ê½Ò²´æÔÚÄÚ´æÀË·ÑÎÊÌâ¡£


2.3 ÀÁººÊ½-·½Ê½1(Ï̲߳»°²È«)

/**
 * ÀÁººÊ½
 *  Ï̲߳»°²È«
 */
public class Singleton {
    //˽Óй¹Ôì·½·¨
    private Singleton() {}

    //ÔÚ³ÉԱλÖô´½¨¸ÃÀàµÄ¶ÔÏó
    private static Singleton instance;

    //¶ÔÍâÌṩ¾²Ì¬·½·¨»ñÈ¡¸Ã¶ÔÏó
    public static Singleton getInstance() {

        if(instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}


˵Ã÷£º

´ÓÉÏÃæ´úÂëÎÒÃÇ¿ÉÒÔ¿´³ö¸Ã·½Ê½ÔÚ³ÉԱλÖÃÉùÃ÷SingletonÀàÐ͵ľ²Ì¬±äÁ¿£¬²¢Ã»ÓнøÐжÔÏóµÄ¸³Öµ²Ù×÷£¬ÄÇôʲôʱºò¸³ÖµµÄÄØ?µ±µ÷ÓÃgetInstance()·½·¨»ñÈ¡SingletonÀàµÄ¶ÔÏóµÄʱºò²Å´´½¨SingletonÀàµÄ¶ÔÏó£¬ÕâÑù¾ÍʵÏÖÁËÀÁ¼ÓÔØµÄЧ¹û¡£µ«ÊÇ£¬Èç¹ûÊǶàÏ̻߳·¾³£¬»á³öÏÖḬ̈߳²È«ÎÊÌâ¡£


2.4 ÀÁººÊ½-·½Ê½2(Ḭ̈߳²È«)

/**
 * ÀÁººÊ½
 *  Ḭ̈߳²È«
 */
public class Singleton {
    //˽Óй¹Ôì·½·¨
    private Singleton() {}

    //ÔÚ³ÉԱλÖô´½¨¸ÃÀàµÄ¶ÔÏó
    private static Singleton instance;

    //¶ÔÍâÌṩ¾²Ì¬·½·¨»ñÈ¡¸Ã¶ÔÏó
    public static synchronized Singleton getInstance() {

        if(instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

˵Ã÷£º

¸Ã·½Ê½Ò²ÊµÏÖÁËÀÁ¼ÓÔØÐ§¹û£¬Í¬Ê±ÓÖ½â¾öÁËḬ̈߳²È«ÎÊÌâ¡£µ«ÊÇÔÚgetInstance()·½·¨ÉÏÌí¼ÓÁËsynchronized¹Ø¼ü×Ö£¬µ¼Ö¸÷½·¨µÄÖ´ÐÐЧ¹ûÌØ±ðµÍ¡£´ÓÉÏÃæ´úÂëÎÒÃÇ¿ÉÒÔ¿´³ö£¬Æäʵ¾ÍÊÇÔÚ³õʼ»¯instanceµÄʱºò²Å»á³öÏÖḬ̈߳²È«ÎÊÌ⣬һµ©³õʼ»¯Íê³É¾Í²»´æÔÚÁË¡£


2.5 ÀÁººÊ½-·½Ê½3(Ë«ÖØ¼ì²éËø)

/**
 * Ë«ÖØ¼ì²é·½Ê½
 */
public class Singleton { 

    //˽Óй¹Ôì·½·¨
    private Singleton() {}

    private static Singleton instance;

   //¶ÔÍâÌṩ¾²Ì¬·½·¨»ñÈ¡¸Ã¶ÔÏó
    public static Singleton getInstance() {
		//µÚÒ»´ÎÅжÏ£¬Èç¹ûinstance²»Îªnull£¬²»½øÈëÇÀËø½×¶Î£¬Ö±½Ó·µ»ØÊµÀý
        if(instance == null) {
            synchronized (Singleton.class) {
                //ÇÀµ½ËøÖ®ºóÔÙ´ÎÅжÏÊÇ·ñΪnull
                if(instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

ÔÙÀ´ÌÖÂÛÒ»ÏÂÀÁººÄ£Ê½ÖмÓËøµÄÎÊÌ⣬¶ÔÓÚ getInstance() ·½·¨À´Ëµ£¬¾ø´ó²¿·ÖµÄ²Ù×÷¶¼ÊǶÁ²Ù×÷£¬¶Á²Ù×÷ÊÇḬ̈߳²È«µÄ£¬ËùÒÔÎÒÃÇû±ØÈÃÿ¸öÏ̱߳ØÐë³ÖÓÐËø²ÅÄܵ÷Óø÷½·¨£¬ÎÒÃÇÐèÒªµ÷Õû¼ÓËøµÄʱ»ú¡£ÓÉ´ËÒ²²úÉúÁËÒ»ÖÖеÄʵÏÖģʽ£ºË«Öؼì²éËøÄ£Ê½

Ë«ÖØ¼ì²éËøÄ£Ê½ÊÇÒ»Öַdz£ºÃµÄµ¥ÀýʵÏÖģʽ£¬½â¾öÁ˵¥Àý¡¢ÐÔÄÜ¡¢Ḭ̈߳²È«ÎÊÌ⣬ÉÏÃæµÄË«ÖØ¼ì²âËøÄ£Ê½¿´ÉÏÈ¥ÍêÃÀÎÞȱ£¬ÆäʵÊÇ´æÔÚÎÊÌ⣬ÔÚ¶àÏ̵߳ÄÇé¿öÏ£¬¿ÉÄÜ»á³öÏÖ¿ÕÖ¸ÕëÎÊÌ⣬³öÏÖÎÊÌâµÄÔ­ÒòÊÇJVMÔÚʵÀý»¯¶ÔÏóµÄʱºò»á½øÐÐÓÅ»¯ºÍÖ¸ÁîÖØÅÅÐò²Ù×÷¡£

Òª½â¾öË«ÖØ¼ì²éËøÄ£Ê½´øÀ´¿ÕÖ¸ÕëÒì³£µÄÎÊÌ⣬ֻÐèҪʹÓà volatile ¹Ø¼ü×Ö, volatile ¹Ø¼ü×Ö¿ÉÒÔ±£Ö¤¿É¼ûÐÔºÍÓÐÐòÐÔ¡£

/**
 * Ë«ÖØ¼ì²é·½Ê½
 */
public class Singleton {

    //˽Óй¹Ôì·½·¨
    private Singleton() {}

    private static volatile Singleton instance;

   //¶ÔÍâÌṩ¾²Ì¬·½·¨»ñÈ¡¸Ã¶ÔÏó
    public static Singleton getInstance() {
		//µÚÒ»´ÎÅжÏ£¬Èç¹ûinstance²»Îªnull£¬²»½øÈëÇÀËø½×¶Î£¬Ö±½Ó·µ»ØÊµ¼Ê
        if(instance == null) {
            synchronized (Singleton.class) {
                //ÇÀµ½ËøÖ®ºóÔÙ´ÎÅжÏÊÇ·ñΪ¿Õ
                if(instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

С½á£º

Ìí¼Ó volatile ¹Ø¼ü×ÖÖ®ºóµÄË«ÖØ¼ì²éËøÄ£Ê½ÊÇÒ»ÖֱȽϺõĵ¥ÀýʵÏÖģʽ£¬Äܹ»±£Ö¤ÔÚ¶àÏ̵߳ÄÇé¿öÏÂḬ̈߳²È«Ò²²»»áÓÐÐÔÄÜÎÊÌâ¡£


2.6 ÀÁººÊ½-·½Ê½4(¾²Ì¬ÄÚ²¿À෽ʽ)

¾²Ì¬ÄÚ²¿À൥ÀýģʽÖÐʵÀýÓÉÄÚ²¿Àà´´½¨£¬ÓÉÓÚ JVM ÔÚ¼ÓÔØÍⲿÀàµÄ¹ý³ÌÖÐ, ÊDz»»á¼ÓÔØ¾²Ì¬ÄÚ²¿ÀàµÄ, Ö»ÓÐÄÚ²¿ÀàµÄÊôÐÔ/·½·¨±»µ÷ÓÃʱ²Å»á±»¼ÓÔØ, ²¢³õʼ»¯Æä¾²Ì¬ÊôÐÔ¡£¾²Ì¬ÊôÐÔÓÉÓÚ±» static ÐÞÊΣ¬±£Ö¤Ö»±»ÊµÀý»¯Ò»´Î£¬²¢ÇÒÑϸñ±£Ö¤ÊµÀý»¯Ë³Ðò¡£

/**
 * ¾²Ì¬ÄÚ²¿À෽ʽ
 */
public class Singleton {

    //˽Óй¹Ôì·½·¨
    private Singleton() {}

    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    //¶ÔÍâÌṩ¾²Ì¬·½·¨»ñÈ¡¸Ã¶ÔÏó
    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

˵Ã÷£º

µÚÒ»´Î¼ÓÔØSingletonÀàʱ²»»áÈ¥³õʼ»¯INSTANCE£¬Ö»ÓеÚÒ»´Îµ÷ÓÃgetInstance£¬ÐéÄâ»ú¼ÓÔØSingletonHolder

²¢³õʼ»¯INSTANCE£¬ÕâÑù²»½öÄÜÈ·±£Ḭ̈߳²È«£¬Ò²Äܱ£Ö¤ Singleton ÀàµÄΨһÐÔ¡£

С½á£º

¾²Ì¬ÄÚ²¿À൥ÀýģʽÊÇÒ»ÖÖÓÅÐãµÄµ¥Àýģʽ£¬ÊÇ¿ªÔ´ÏîÄ¿ÖбȽϳ£ÓõÄÒ»ÖÖµ¥Àýģʽ¡£ÔÚûÓмÓÈκÎËøµÄÇé¿öÏ£¬±£Ö¤Á˶àÏß³Ìϵݲȫ£¬²¢ÇÒûÓÐÈκÎÐÔÄÜÓ°ÏìºÍ¿Õ¼äµÄÀË·Ñ¡£


2.7 ö¾Ù·½Ê½

ö¾ÙÀàʵÏÖµ¥ÀýģʽÊǼ«Á¦ÍƼöµÄµ¥ÀýʵÏÖģʽ£¬ÒòΪö¾ÙÀàÐÍÊÇḬ̈߳²È«µÄ£¬²¢ÇÒÖ»»á×°ÔØÒ»´Î£¬Éè¼ÆÕß³ä·ÖµÄÀûÓÃÁËö¾ÙµÄÕâ¸öÌØÐÔÀ´ÊµÏÖµ¥Àýģʽ£¬Ã¶¾ÙµÄд·¨·Ç³£¼òµ¥£¬¶øÇÒö¾ÙÀàÐÍÊÇËùÓõ¥ÀýʵÏÖÖÐΨһһÖÖ²»»á±»ÆÆ»µµÄµ¥ÀýʵÏÖģʽ¡£

<br class="Apple-interchange-newline"><div></div>

/**
 * ö¾Ù·½Ê½
 */
public enum Singleton {
    INSTANCE;
}

˵Ã÷£º

ö¾Ù·½Ê½ÊôÓÚ¶ñººÊ½·½Ê½¡£

ºÃ¿Ú±®ITÅàѵ



²ÂÄãϲ»¶£º

ʲôÊǵ¥Àýģʽ?Óм¸ÖÖ?

µ¥Àýģʽ½Ì³Ì£ºµ¥ÀýģʽµÄ¼¸ÖÖʵÏÖ·½Ê½

JavaÉè¼ÆÄ£Ê½Ö®µ¥ÀýģʽÒÔ¼°µ¥ÀýËùÒý·¢µÄ˼¿¼

ÀÖÓãµç¾ºjava¿ª·¢Åàѵ¿Î³Ì

0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿