餓漢式單例
com.cleversoft.designpatterns.singleton1.Singleton.java:
package?com.cleversoft.designpatterns.singleton1;

/**
?*?Hungry?Singleton
?*?
?
*/

public?class?Singleton?{

????
private?static?Singleton?singleton?=?new?Singleton();

????
private?Singleton()?{
????}


????
public?static?Singleton?getInstance()?{
????????
return?singleton;
????}


????
public?String?demoMethod()?{
????????
return?"This?is?a?hungry?singleton?demo!";
????}

}

com.cleversoft.designpatterns.singleton1.Main.java:
package?com.cleversoft.designpatterns.singleton1;

public?class?Main?{

????
/**
?????*?
@param?args
?????
*/

????
public?static?void?main(String[]?args)?{
????????
//?TODO?Auto-generated?method?stub
????????System.out.println(Singleton.getInstance().demoMethod());
????}


}

懶漢式單例
com.cleversoft.designpatterns.singleton2.LazySingleton.java:
package?com.cleversoft.designpatterns.singleton2;

/**
?*?Lazy?Singleton
?*?
?
*/

public?class?LazySingleton?{
????
static?boolean?instance_flag?=?false;

????
private?LazySingleton()?{
????}


????
synchronized?public?static?LazySingleton?getInstance()?{
????????
if?(!instance_flag)?{
????????????instance_flag?
=?true;
????????????
return?new?LazySingleton();
????????}
?else
????????????
return?null;
????}


}

com.cleversoft.designpatterns.singleton2.Main.java:
package?com.cleversoft.designpatterns.singleton2;

public?class?Main?{

????
/**
?????*?
@param?args
?????
*/

????
public?static?void?main(String[]?args)?{
????????
//?TODO?Auto-generated?method?stub
????????LazySingleton?ls1,?ls2;
????????System.out.println(
"Start?to?get?first?Instance");
????????ls1?
=?LazySingleton.getInstance();
????????
if?(ls1?!=?null){
????????????System.out.println(
"This?is?the?first?Instance!\n");
????????}

????????
????????System.out.println(
"Start?to?get?second?Instance");
????????ls2?
=?LazySingleton.getInstance();
????????
if?(ls2?!=?null){
????????????System.out.println(
"This?is?the?second?Instance!");
????????}

????????
else{????????????
????????????System.out.println(
"You?can?just?get?1?Instance!");
????????}

????????
????}


}

引用:
?>強烈建議大家不要再花時間在實現(xiàn)雙重檢查成例上
是這樣,不必在這上面鉆牛角尖,而且單例模式在實際應(yīng)用中已經(jīng)逐步被Ioc容器替代,實用價值不高。(banq
(http://www.jdon.com/jive/thread.jsp?forum=91&thread=23890)

參考資料:
1. 《Java與模式》
2. http://www.java2s.com


歡迎大家訪問我的個人網(wǎng)站 萌萌的IT人