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

2014-11-24 08:22:21 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 0

×÷Ϊ¶ÔÏóµÄ´´½¨Ä£Ê½£¬µ¥Àýģʽȷ±£Ä³Ò»¸öÀàÖ»ÓÐÒ»¸öʵÀý£¬¶øÇÒ×ÔÐÐʵÀý»¯²¢ÏòÕû¸öϵͳÌṩÕâ¸öʵÀý¡£Õâ¸öÀà³ÆÎªµ¥ÀýÀà

µ¥ÀýģʽµÄ½á¹¹
¡¡¡¡µ¥ÀýģʽµÄÌØµã£º
µ¥ÀýÀàÖ»ÄÜÓÐÒ»¸öʵÀý¡£
µ¥ÀýÀà±ØÐë×Ô¼º´´½¨×Ô¼ºµÄΨһʵÀý¡£
µ¥ÀýÀà±ØÐë¸øËùÓÐÆäËû¶ÔÏóÌṩÕâһʵÀý¡£
¡¡¡¡¶öººÊ½µ¥ÀýÀà
[java]
public class EagerSingleton {
private static EagerSingleton instance = new EagerSingleton();
/**
* ˽ÓÐĬÈϹ¹Ôì×Ó
*/
private EagerSingleton(){}
/**
* ¾²Ì¬¹¤³§·½·¨
*/
public static EagerSingleton getInstance(){
return instance;
}
}
public class EagerSingleton {
private static EagerSingleton instance = new EagerSingleton();
/**
* ˽ÓÐĬÈϹ¹Ôì×Ó
*/
private EagerSingleton(){}
/**
* ¾²Ì¬¹¤³§·½·¨
*/
public static EagerSingleton getInstance(){
return instance;
}
}

¡¡

¡¡ÉÏÃæµÄÀý×ÓÖУ¬ÔÚÕâ¸öÀà±»¼ÓÔØÊ±£¬¾²Ì¬±äÁ¿instance»á±»³õʼ»¯£¬´ËʱÀàµÄ˽Óй¹Ôì×ӻᱻµ÷Óá£Õâʱºò£¬µ¥ÀýÀàµÄΨһʵÀý¾Í±»´´½¨³öÀ´ÁË¡£

¡¡¡¡¶öººÊ½ÆäʵÊÇÒ»ÖֱȽÏÐÎÏóµÄ³ÆÎ½¡£¼ÈÈ»¶ö£¬ÄÇôÔÚ´´½¨¶ÔÏóʵÀýµÄʱºò¾Í±È½Ï׿±£¬¶öÁËÂÓÚÊÇÔÚ×°ÔØÀàµÄʱºò¾Í´´½¨¶ÔÏóʵÀý¡£

[java]
private static EagerSingleton instance = new EagerSingleton();
private static EagerSingleton instance = new EagerSingleton();

¡¡¡¡¶öººÊ½ÊǵäÐ͵Ŀռ任ʱ¼ä£¬µ±Àà×°ÔØµÄʱºò¾Í»á´´½¨ÀàµÄʵÀý£¬²»¹ÜÄãÓò»Óã¬ÏÈ´´½¨³öÀ´£¬È»ºóÿ´Îµ÷ÓõÄʱºò£¬¾Í²»ÐèÒªÔÙÅжϣ¬½ÚÊ¡ÁËÔËÐÐʱ¼ä¡£
¡¡¡¡ÀÁººÊ½µ¥ÀýÀà
[java]
public class LazySingleton {
private static LazySingleton instance = null;
/**
* ˽ÓÐĬÈϹ¹Ôì×Ó
*/
private LazySingleton(){}
/**
* ¾²Ì¬¹¤³§·½·¨
*/
public static synchronized LazySingleton getInstance(){
if(instance == null){
instance = new LazySingleton();
}
return instance;
}
}
public class LazySingleton {
private static LazySingleton instance = null;
/**
* ˽ÓÐĬÈϹ¹Ôì×Ó
*/
private LazySingleton(){}
/**
* ¾²Ì¬¹¤³§·½·¨
*/
public static synchronized LazySingleton getInstance(){
if(instance == null){
instance = new LazySingleton();
}
return instance;
}
}

¡¡¡¡ÉÏÃæµÄÀÁººÊ½µ¥ÀýÀàʵÏÖÀï¶Ô¾²Ì¬¹¤³§·½·¨Ê¹ÓÃÁËͬ²½»¯£¬ÒÔ´¦Àí¶àÏ̻߳·¾³¡£
¡¡¡¡ÀÁººÊ½ÆäʵÊÇÒ»ÖֱȽÏÐÎÏóµÄ³ÆÎ½¡£¼ÈÈ»ÀÁ£¬ÄÇôÔÚ´´½¨¶ÔÏóʵÀýµÄʱºò¾Í²»×ż±¡£»áÒ»Ö±µÈµ½ÂíÉÏҪʹÓöÔÏóʵÀýµÄʱºò²Å»á´´½¨£¬ÀÁÈËÂ×ÜÊÇÍÆÍѲ»¿ªµÄʱºò²Å»áÕæÕýÈ¥Ö´Ðй¤×÷£¬Òò´ËÔÚ×°ÔØ¶ÔÏóµÄʱºò²»´´½¨¶ÔÏóʵÀý¡£

[java]
private static LazySingleton instance = null;
private static LazySingleton instance = null;

¡¡¡¡ÀÁººÊ½ÊǵäÐ͵Äʱ¼ä»»¿Õ¼ä,¾ÍÊÇÿ´Î»ñȡʵÀý¶¼»á½øÐÐÅжϣ¬¿´ÊÇ·ñÐèÒª´´½¨ÊµÀý£¬ÀË·ÑÅжϵÄʱ¼ä¡£µ±È»£¬Èç¹ûһֱûÓÐÈËʹÓõϰ£¬ÄǾͲ»»á´´½¨ÊµÀý£¬Ôò½ÚÔ¼ÄÚ´æ¿Õ¼ä

¡¡¡¡ÓÉÓÚÀÁººÊ½µÄʵÏÖÊÇḬ̈߳²È«µÄ£¬ÕâÑù»á½µµÍÕû¸ö·ÃÎʵÄËÙ¶È£¬¶øÇÒÿ´Î¶¼ÒªÅжϡ£ÄÇôÓÐûÓиüºÃµÄ·½Ê½ÊµÏÖÄØ£¿

¡¡¡¡Ë«Öؼì²é¼ÓËø
¡¡¡¡¿ÉÒÔʹÓá°Ë«Öؼì²é¼ÓËø¡±µÄ·½Ê½À´ÊµÏÖ£¬¾Í¿ÉÒÔ¼ÈʵÏÖḬ̈߳²È«£¬ÓÖÄܹ»Ê¹ÐÔÄܲ»ÊܴܺóµÄÓ°Ïì¡£ÄÇôʲôÊÇ¡°Ë«Öؼì²é¼ÓËø¡±»úÖÆÄØ£¿

¡¡¡¡Ëùν¡°Ë«Öؼì²é¼ÓËø¡±»úÖÆ£¬Ö¸µÄÊÇ£º²¢²»ÊÇÿ´Î½øÈëgetInstance·½·¨¶¼ÐèҪͬ²½£¬¶øÊÇÏȲ»Í¬²½£¬½øÈë·½·¨ºó£¬Ïȼì²éʵÀýÊÇ·ñ´æÔÚ£¬Èç¹û²»´æÔڲŽøÐÐÏÂÃæµÄͬ²½¿é£¬ÕâÊǵÚÒ»ÖØ¼ì²é£¬½øÈëͬ²½¿é¹ýºó£¬Ôٴμì²éʵÀýÊÇ·ñ´æÔÚ£¬Èç¹û²»´æÔÚ£¬¾ÍÔÚͬ²½µÄÇé¿öÏ´´½¨Ò»¸öʵÀý£¬ÕâÊǵڶþÖØ¼ì²é¡£ÕâÑùÒ»À´£¬¾ÍÖ»ÐèҪͬ²½Ò»´ÎÁË£¬´Ó¶ø¼õÉÙÁ˶à´ÎÔÚͬ²½Çé¿öϽøÐÐÅжÏËùÀ˷ѵÄʱ¼ä¡£

¡¡¡¡¡°Ë«Öؼì²é¼ÓËø¡±»úÖÆµÄʵÏÖ»áʹÓùؼü×Övolatile£¬ËüµÄÒâ˼ÊÇ£º±»volatileÐÞÊεıäÁ¿µÄÖµ£¬½«²»»á±»±¾µØÏ̻߳º´æ£¬ËùÓжԸñäÁ¿µÄ¶Áд¶¼ÊÇÖ±½Ó²Ù×÷¹²ÏíÄڴ棬´Ó¶øÈ·±£¶à¸öÏß³ÌÄÜÕýÈ·µÄ´¦Àí¸Ã±äÁ¿¡£

¡¡¡¡×¢Ò⣺ÔÚjava1.4¼°ÒÔǰ°æ±¾ÖУ¬ºÜ¶àJVM¶ÔÓÚvolatile¹Ø¼ü×ÖµÄʵÏÖµÄÎÊÌ⣬»áµ¼Ö¡°Ë«Öؼì²é¼ÓËø¡±µÄʧ°Ü£¬Òò´Ë¡°Ë«Öؼì²é¼ÓËø¡±»úÖÆÖ»Ö»ÄÜÓÃÔÚjava5¼°ÒÔÉϵİ汾¡£

[java]
public class Singleton {
private volatile static Singleton instance = null;
private Singleton(){}
public static Singleton getInstance(){
//Ïȼì²éʵÀýÊÇ·ñ´æÔÚ£¬Èç¹û²»´æÔڲŽøÈëÏÂÃæµÄͬ²½¿é
if(instance == null){
//ͬ²½¿é£¬Ḭ̈߳²È«µÄ´´½¨ÊµÀý
synchronized (Singleton.class) {
//Ôٴμì²éʵÀýÊÇ·ñ´æÔÚ£¬Èç¹û²»´æÔÚ²ÅÕæÕýµÄ´´½¨ÊµÀý
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
public class Singleton {
private volatile static Singleton instance = null;
private Singleton(){}
public static Singleton getInstance(){
//Ïȼì²éʵÀýÊÇ·ñ´æÔÚ£¬Èç¹û²»´æÔڲŽøÈëÏÂÃæµÄͬ²½¿é
if(instance == null){
/