¡¶JAVAÓëģʽ¡·µÚ4Ìì¨Dµ¥Àýģʽ(¶þ)

2014-11-24 08:22:21 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 1
/ͬ²½¿é£¬Ḭ̈߳²È«µÄ´´½¨ÊµÀý
synchronized (Singleton.class) {
//Ôٴμì²éʵÀýÊÇ·ñ´æÔÚ£¬Èç¹û²»´æÔÚ²ÅÕæÕýµÄ´´½¨ÊµÀý
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}

¡¡¡¡ÕâÖÖʵÏÖ·½Ê½¼È¿ÉÒÔʵÏÖḬ̈߳²È«µØ´´½¨ÊµÀý£¬¶øÓÖ²»»á¶ÔÐÔÄÜÔì³ÉÌ«´óµÄÓ°Ïì¡£ËüÖ»ÊǵÚÒ»´Î´´½¨ÊµÀýµÄʱºòͬ²½£¬ÒÔºó¾Í²»ÐèҪͬ²½ÁË£¬´Ó¶ø¼Ó¿ìÁËÔËÐÐËÙ¶È¡£

¡¡¡¡Ìáʾ£ºÓÉÓÚvolatile¹Ø¼ü×Ö¿ÉÄÜ»áÆÁ±ÎµôÐéÄâ»úÖÐһЩ±ØÒªµÄ´úÂëÓÅ»¯£¬ËùÒÔÔËÐÐЧÂʲ¢²»ÊǺܸߡ£Òò´ËÒ»°ã½¨Ò飬ûÓÐÌØ±ðµÄÐèÒª£¬²»ÒªÊ¹Óá£Ò²¾ÍÊÇ˵£¬ËäÈ»¿ÉÒÔʹÓá°Ë«Öؼì²é¼ÓËø¡±»úÖÆÀ´ÊµÏÖḬ̈߳²È«µÄµ¥Àý£¬µ«²¢²»½¨Òé´óÁ¿²ÉÓ㬿ÉÒÔ¸ù¾ÝÇé¿öÀ´Ñ¡Óá£

¡¡¡¡¸ù¾ÝÉÏÃæµÄ·ÖÎö£¬³£¼ûµÄÁ½ÖÖµ¥ÀýʵÏÖ·½Ê½¶¼´æÔÚССµÄȱÏÝ£¬ÄÇôÓÐûÓÐÒ»ÖÖ·½°¸£¬¼ÈÄÜʵÏÖÑÓ³Ù¼ÓÔØ£¬ÓÖÄÜʵÏÖḬ̈߳²È«ÄØ£¿

¡¡¡¡

¡¡¡¡Lazy initialization holder classģʽ
¡¡¡¡Õâ¸öģʽ×ÛºÏʹÓÃÁËJavaµÄÀ༶ÄÚ²¿ÀàºÍ¶àÏß³Ìȱʡͬ²½ËøµÄ֪ʶ£¬ºÜÇÉÃîµØÍ¬Ê±ÊµÏÖÁËÑÓ³Ù¼ÓÔØºÍḬ̈߳²È«¡£

¡¡¡¡1.ÏàÓ¦µÄ»ù´¡ÖªÊ¶
¡¡Ê²Ã´ÊÇÀ༶ÄÚ²¿Àࣿ
¡¡¡¡¼òµ¥µã˵£¬À༶ÄÚ²¿ÀàÖ¸µÄÊÇ£¬ÓÐstaticÐÞÊεijÉԱʽÄÚ²¿Àà¡£Èç¹ûûÓÐstaticÐÞÊεijÉԱʽÄÚ²¿Àà±»³ÆÎª¶ÔÏó¼¶ÄÚ²¿Àà¡£

¡¡¡¡À༶ÄÚ²¿ÀàÏ൱ÓÚÆäÍⲿÀàµÄstatic³É·Ö£¬ËüµÄ¶ÔÏóÓëÍⲿÀà¶ÔÏó¼ä²»´æÔÚÒÀÀµ¹ØÏµ£¬Òò´Ë¿ÉÖ±½Ó´´½¨¡£¶ø¶ÔÏó¼¶ÄÚ²¿ÀàµÄʵÀý£¬Êǰó¶¨ÔÚÍⲿ¶ÔÏóʵÀýÖеġ£

¡¡¡¡À༶ÄÚ²¿ÀàÖУ¬¿ÉÒÔ¶¨Ò徲̬µÄ·½·¨¡£ÔÚ¾²Ì¬·½·¨ÖÐÖ»Äܹ»ÒýÓÃÍⲿÀàÖеľ²Ì¬³ÉÔ±·½·¨»òÕß³ÉÔ±±äÁ¿¡£

¡¡¡¡À༶ÄÚ²¿ÀàÏ൱ÓÚÆäÍⲿÀàµÄ³ÉÔ±£¬Ö»ÓÐÔÚµÚÒ»´Î±»Ê¹ÓõÄʱºò²Å±»»á×°ÔØ¡£

¡¡¶àÏß³Ìȱʡͬ²½ËøµÄ֪ʶ
¡¡¡¡´ó¼Ò¶¼ÖªµÀ£¬ÔÚ¶àÏ߳̿ª·¢ÖУ¬ÎªÁ˽â¾ö²¢·¢ÎÊÌ⣬Ö÷ÒªÊÇͨ¹ýʹÓÃsynchronizedÀ´¼Ó»¥³âËø½øÐÐͬ²½¿ØÖÆ¡£µ«ÊÇÔÚijЩÇé¿öÖУ¬JVMÒѾ­Òþº¬µØÎªÄúÖ´ÐÐÁËͬ²½£¬ÕâЩÇé¿öϾͲ»ÓÃ×Ô¼ºÔÙÀ´½øÐÐͬ²½¿ØÖÆÁË¡£ÕâЩÇé¿ö°üÀ¨£º

¡¡¡¡1.Óɾ²Ì¬³õʼ»¯Æ÷£¨ÔÚ¾²Ì¬×Ö¶ÎÉÏ»òstatic{}¿éÖеijõʼ»¯Æ÷£©³õʼ»¯Êý¾Ýʱ

¡¡¡¡2.·ÃÎÊfinal×Ö¶Îʱ

¡¡¡¡3.ÔÚ´´½¨Ïß³Ì֮ǰ´´½¨¶ÔÏóʱ

¡¡¡¡4.Ï߳̿ÉÒÔ¿´¼ûËü½«Òª´¦ÀíµÄ¶ÔÏóʱ

¡¡¡¡2.½â¾ö·½°¸µÄ˼·
¡¡¡¡ÒªÏëºÜ¼òµ¥µØÊµÏÖḬ̈߳²È«£¬¿ÉÒÔ²ÉÓþ²Ì¬³õʼ»¯Æ÷µÄ·½Ê½£¬Ëü¿ÉÒÔÓÉJVMÀ´±£Ö¤Ï̵߳ݲȫÐÔ¡£±ÈÈçÇ°ÃæµÄ¶öººÊ½ÊµÏÖ·½Ê½¡£µ«ÊÇÕâÑùÒ»À´£¬²»ÊÇ»áÀË·ÑÒ»¶¨µÄ¿Õ¼äÂð£¿ÒòΪÕâÖÖʵÏÖ·½Ê½£¬»áÔÚÀà×°ÔØµÄʱºò¾Í³õʼ»¯¶ÔÏ󣬲»¹ÜÄãÐè²»ÐèÒª¡£

¡¡¡¡Èç¹ûÏÖÔÚÓÐÒ»ÖÖ·½·¨Äܹ»ÈÃÀà×°ÔØµÄʱºò²»È¥³õʼ»¯¶ÔÏó£¬ÄDz»¾Í½â¾öÎÊÌâÁË£¿Ò»ÖÖ¿ÉÐеķ½Ê½¾ÍÊDzÉÓÃÀ༶ÄÚ²¿À࣬ÔÚÕâ¸öÀ༶ÄÚ²¿ÀàÀïÃæÈ¥´´½¨¶ÔÏóʵÀý¡£ÕâÑùÒ»À´£¬Ö»Òª²»Ê¹Óõ½Õâ¸öÀ༶ÄÚ²¿À࣬ÄǾͲ»»á´´½¨¶ÔÏóʵÀý£¬´Ó¶øÍ¬Ê±ÊµÏÖÑÓ³Ù¼ÓÔØºÍḬ̈߳²È«¡£

¡¡¡¡Ê¾Àý´úÂëÈçÏ£º

[java]
public class Singleton {

private Singleton(){}
/**
* À༶µÄÄÚ²¿À࣬Ҳ¾ÍÊǾ²Ì¬µÄ³ÉԱʽÄÚ²¿À࣬¸ÃÄÚ²¿ÀàµÄʵÀýÓëÍⲿÀàµÄʵÀý
* ûÓа󶨹ØÏµ£¬¶øÇÒÖ»Óб»µ÷Óõ½Ê±²Å»á×°ÔØ£¬´Ó¶øÊµÏÖÁËÑÓ³Ù¼ÓÔØ¡£
*/
private static class SingletonHolder{
/**
* ¾²Ì¬³õʼ»¯Æ÷£¬ÓÉJVMÀ´±£Ö¤Ḭ̈߳²È«
*/
private static Singleton instance = new Singleton();
}

public static Singleton getInstance(){
return SingletonHolder.instance;
}
}
public class Singleton {

private Singleton(){}
/**
* À༶µÄÄÚ²¿À࣬Ҳ¾ÍÊǾ²Ì¬µÄ³ÉԱʽÄÚ²¿À࣬¸ÃÄÚ²¿ÀàµÄʵÀýÓëÍⲿÀàµÄʵÀý
* ûÓа󶨹ØÏµ£¬¶øÇÒÖ»Óб»µ÷Óõ½Ê±²Å»á×°ÔØ£¬´Ó¶øÊµÏÖÁËÑÓ³Ù¼ÓÔØ¡£
*/
private static class SingletonHolder{
/**
* ¾²Ì¬³õʼ»¯Æ÷£¬ÓÉJVMÀ´±£Ö¤Ḭ̈߳²È«
*/
private static Singleton instance = new Singleton();
}

public static Singleton getInstance(){
return SingletonHolder.instance;
}
}

¡¡¡¡µ±getInstance·½·¨µÚÒ»´Î±»µ÷ÓõÄʱºò£¬ËüµÚÒ»´Î¶ÁÈ¡SingletonHolder.instance£¬µ¼ÖÂSingletonHolderÀàµÃµ½³õʼ»¯£»¶øÕâ¸öÀàÔÚ×°ÔØ²¢±»³õʼ»¯µÄʱºò£¬»á³õʼ»¯ËüµÄ¾²Ì¬Óò£¬´Ó¶ø´´½¨SingletonµÄʵÀý£¬ÓÉÓÚÊǾ²Ì¬µÄÓò£¬Òò´ËÖ»»áÔÚÐéÄâ»ú×°ÔØÀàµÄʱºò³õʼ»¯Ò»´Î£¬²¢ÓÉÐéÄâ»úÀ´±£Ö¤ËüµÄḬ̈߳²È«ÐÔ¡£

¡¡¡¡Õâ¸öģʽµÄÓÅÊÆÔÚÓÚ£¬getInstance·½·¨²¢Ã»Óб»Í¬²½£¬²¢ÇÒÖ»ÊÇÖ´ÐÐÒ»¸öÓòµÄ·ÃÎÊ£¬Òò´ËÑÓ³Ù³õʼ»¯²¢Ã»ÓÐÔö¼ÓÈκηÃÎʳɱ¾¡£

¡¡¡¡

¡¡¡¡µ¥ÀýºÍö¾Ù
¡¡¡¡°´ÕÕ¡¶¸ßЧJava µÚ¶þ°æ¡·ÖеÄ˵·¨£ºµ¥ÔªËصÄö¾ÙÀàÐÍÒѾ­³ÉΪʵÏÖSingletonµÄ×î¼Ñ·½·¨¡£ÓÃö¾ÙÀ´ÊµÏÖµ¥Àý·Ç³£¼òµ¥£¬Ö»ÐèÒª±àдһ¸ö°üº¬µ¥¸öÔªËØµÄö¾ÙÀàÐͼ´¿É¡£

[java]
public enum Singleton {
/**
* ¶¨ÒåÒ»¸öö¾ÙµÄÔªËØ£¬Ëü¾Í´ú±íÁËSingletonµÄÒ»¸öʵÀý¡£
*/

uniqueInstance;

/**
* µ¥Àý¿ÉÒÔÓÐ×Ô¼ºµÄ²Ù×÷
*/
public void singletonOperation(){
//¹¦ÄÜ´¦Àí
}
}
public enum Singleton {
/**
* ¶¨ÒåÒ»¸öö¾ÙµÄÔªËØ£¬Ëü¾Í´ú±íÁËSingletonµÄÒ»¸öʵÀý¡£
*/

uniqueInstance;

/**
* µ¥Àý¿ÉÒÔÓÐ×Ô¼ºµÄ²Ù×÷
*/
public void singletonOperation(){
//¹¦ÄÜ´¦Àí
}
}

¡¡¡¡Ê¹ÓÃö¾ÙÀ´ÊµÏÖµ¥ÊµÀý¿ØÖÆ»á¸ü¼Ó¼ò½à£¬¶øÇÒÎÞ³¥µØÌṩÁËÐòÁл¯»úÖÆ£¬²¢ÓÉJVM´Ó¸ù±¾ÉÏÌṩ±£ÕÏ£¬¾ø¶Ô·ÀÖ¹¶à´ÎʵÀý»¯£¬ÊǸü¼ò½à¡¢¸ßЧ¡¢°²È«µÄʵÏÖµ¥ÀýµÄ·½Ê½¡£

×÷Õߣºm13666368773