璇村埌Singleton,灝變笉鑳戒笉鎻愬叏灞鍙橀噺銆傝繃鍘繪垜浠弽瀵瑰叏灞鍙橀噺錛屼負(fù)浠涔堝憿錛熷叏灞鍙橀噺涓鑸瓨鍦ㄤ笁涓棶棰橈細(xì)
<!--[if !supportLists]-->1.聽聽聽聽聽 鍛藉悕鍐茬獊錛屼篃鍙悕瀛楁薄鏌?/span><!--[endif]-->
<!--[if !supportLists]-->2.聽聽聽聽聽 鍒濆鍖栭『搴忎緷璧栭棶棰樸?/span><!--[endif]-->
<!--[if !supportLists]-->3.聽聽聽聽聽 榪滅▼浠g爜鑰﹀悎闂銆?/span><!--[endif]-->
瀵逛簬絎竴涓棶棰橈紝鍏跺疄瑙e喅寰堢畝鍗曪紝閫氳繃鍛藉悕瑙勮寖鍙互鏈夋晥瑙e喅銆傚彟澶栵紝鍊熷姪璇█鏈哄埗涔熷鏄撹В鍐籌紝渚嬪C++鐨?/span>namespace, class鎴?/span>struct鐨勯潤(rùn)鎬佹暟鎹垚鍛樸?/span>Java鍜?/span>C#鏍規(guī)湰涓嶅厑璁稿叏灞鍙橀噺錛屽茍涓斿紩鍏ュ寘鏈哄埗錛岄兘鍙互緙撹В鐢氳嚦娑堥櫎榪欎竴褰卞搷錛岃嚦灝戯紝Singleton瀵硅闂鐨勮В鍐沖姏搴﹀茍涓嶈秴榪囪繖浜涜璦鎻愪緵鐨勫唴寤烘満鍒躲?/span>
鍒濆鍖栭『搴忎緷璧栭棶棰樻槸涓涓浉褰撳井濡欑殑闂銆傚熷姪浜?/span>Singleton, 鎴戜滑鍙互寮哄埗鏌愪簺瀵硅薄鎸夐渶鍒涘緩錛岄伩鍏嶅垵濮嬪寲欏哄簭渚濊禆瀵艱嚧鐨勯棶棰樸傜劧鑰岋紝鍒濆鍖栭『搴忔槸涓涓浄鍖猴紝鎴戜滑蹇呴』灝忓績(jī)緲肩考鍦扮粫榪囧幓錛屼絾棣栧厛涓嶅簲璇ラ氳繃瀹炵幇鎶鏈潵瑙勯伩闂錛岃屽簲璇ヨ皟鏁磋璁★紝璁╁垵濮嬪寲欏哄簭闂鏍規(guī)湰涓嶅嚭鐜版墠鏄笂絳栥傜浜岋紝鏌愪簺鎯呭喌涓嬶紝鎴戜滑紜疄闇瑕佽閬垮垵濮嬪寲欏哄簭闂錛屾垜浠篃闇瑕佹竻閱掑湴璁よ瘑鍒拌瀹炵幇鎵嬫褰卞搷鍒扮殑浠g爜鑼冨洿錛屽彈鍏跺獎(jiǎng)鍝嶇殑閮ㄥ垎瓚婂崟涓瓚婂ソ銆?/span>
榪滅▼浠g爜鑰﹀悎錛岃繖鏄垜浠弽瀵瑰叏灞鍙橀噺鐨勬牳蹇?jī)闂銆備換浣曢暱璺濈鐨勮﹀悎閮藉皢瀵艱嚧浠g爜鐨勫彲璇繪т笅闄嶏紝榪涜屽彲鑳藉獎(jiǎng)鍝嶄唬鐮佺粨鏋勶紝瀵艱嚧緇撴瀯鍍靛寲錛屾棤鍔涘簲瀵瑰洜闇姹傚彉鍖栧鑷寸殑緇撴瀯璋冩暣銆傚緢閬楁喚錛?/span>Singleton騫朵笉鑳藉榪欎釜闂鏈変換浣曞府鍔┿傚綋鎴戜滑鍥為伩鍏ㄥ眬鍙橀噺鐨勬椂鍊欙紝浜嬪疄涓婏紝鎴戜滑涔熻閬夸簡(jiǎn)涓婅堪鐨勪笁涓棶棰樸傚彲鏄紝濡傛灉鎴戜滑涓嶈兘瀹℃厧鍦頒嬌鐢?/span>Singleton灝變細(xì)閲嶆柊钀藉叆鍏ㄥ眬鍙橀噺鐨勬牳蹇?jī)闄烽樧兏巺R?/span>
鍚嶇О | Singleton |
緇撴瀯 |
![]() |
鎰忓浘 | 淇濊瘉涓涓被浠呮湁涓涓疄渚嬶紝騫舵彁渚涗竴涓闂畠鐨勫叏灞璁塊棶鐐廣?/font> |
閫傜敤鎬?/font> |
|
鍦ㄥ緢澶氭搷浣滀腑錛屾瘮濡傚緩绔嬬洰褰?鏁版嵁搴撹繛鎺ラ兘闇瑕佽繖鏍風(fēng)殑鍗曠嚎紼嬫搷浣溿?/p>
榪樻湁, singleton鑳藉琚姸鎬佸寲; 榪欐牱錛屽涓崟鎬佺被鍦ㄤ竴璧峰氨鍙互浣滀負(fù)涓涓姸鎬佷粨搴撲竴鏍峰悜澶栨彁渚涙湇鍔★紝姣斿錛屼綘瑕佽鍧涗腑鐨勫笘瀛愯鏁板櫒錛屾瘡嬈℃祻瑙堜竴嬈¢渶瑕佽鏁幫紝鍗曟佺被鑳藉惁淇濇寔浣忚繖涓鏁幫紝騫朵笖鑳絪ynchronize鐨勫畨鍏ㄨ嚜鍔ㄥ姞1錛屽鏋滀綘瑕佹妸榪欎釜鏁板瓧姘鎬箙淇濆瓨鍒版暟鎹簱錛屼綘鍙互鍦ㄤ笉淇敼鍗曟佹帴鍙g殑鎯呭喌涓嬫柟渚跨殑鍋氬埌銆?/p>
鍙﹀鏂歸潰錛孲ingleton涔熻兘澶熻鏃犵姸鎬佸寲銆傛彁渚涘伐鍏鋒ц川鐨勫姛鑳斤紝
Singleton妯″紡灝變負(fù)鎴戜滑鎻愪緵浜?jiǎn)杩欐牱瀹炵幇鐨勫彲鑳姐備嬌鐢⊿ingleton鐨勫ソ澶勮繕鍦ㄤ簬鍙互鑺傜渷鍐呭瓨錛屽洜涓哄畠闄愬埗浜?jiǎn)瀹炰緥鐨勪釜鏁板Q屾湁鍒╀簬Java鍨冨溇鍥炴敹錛坓arbage collection錛夈?br />
鎴戜滑甯稿父鐪嬪埌宸ュ巶妯″紡涓被瑁呭叆鍣?class loader)涓篃鐢⊿ingleton妯″紡瀹炵幇鐨?鍥犱負(fù)琚鍏ョ殑綾誨疄闄呬篃灞炰簬璧勬簮銆?br />
濡備綍浣跨敤?
涓鑸琒ingleton妯″紡閫氬父鏈夊嚑縐嶅艦寮?
public class Singleton { 銆銆private Singleton(){} 銆銆//鍦ㄨ嚜宸卞唴閮ㄥ畾涔夎嚜宸變竴涓疄渚嬶紝鏄笉鏄緢濂囨紵 銆銆private static Singleton instance = new Singleton(); 銆銆//榪欓噷鎻愪緵浜?jiǎn)涓涓緵澶栭儴璁塊棶鏈琧lass鐨勯潤(rùn)鎬佹柟娉曪紝鍙互鐩存帴璁塊棶銆銆 聽 |
絎簩縐嶅艦寮?
public class Singleton {
銆銆private static Singleton instance = null; } 聽 |
浣跨敤Singleton.getInstance()鍙互璁塊棶鍗曟佺被銆?/p>
涓婇潰絎簩涓艦寮忔槸lazy initialization錛屼篃灝辨槸璇寸涓嬈¤皟鐢ㄦ椂鍒濆Singleton錛屼互鍚庡氨涓嶇敤鍐嶇敓鎴愪簡(jiǎn)銆?/p>
娉ㄦ剰鍒發(fā)azy initialization褰㈠紡涓殑synchronized錛岃繖涓猻ynchronized寰堥噸瑕侊紝濡傛灉娌℃湁synchronized錛岄偅涔堜嬌鐢╣etInstance()鏄湁鍙兘寰楀埌澶氫釜Singleton瀹炰緥銆傚叧浜巐azy initialization鐨凷ingleton鏈夊緢澶氭秹鍙?qiáng)double-checked locking (DCL)鐨勮璁猴紝鏈夊叴瓚h呰繘涓姝ョ爺絀躲?/p>
涓鑸涓虹涓縐嶅艦寮忚鏇村姞瀹夊叏浜涖?br />