單l例模式

這幾天一直在學習設計模式,看到訪問者模式有點不太理解,上javaeye搜索到獸王Rjx2008的博客,發現不少好東西。
先看了個常見的單例模式,剛接觸設計模式買了本大話設計模式,講到單例模式時關於多線程,用了雙重檢查鎖DCL,不過在獸王的博客裏對其否定了,來看看獸王是怎麼講解的吧。
[url=http://rjx2008.iteye.com/blog/342474#comments]不容易掌握的單例模式[/url]


小知識:單例模式有兩種,飽漢、餓漢。顧名思義餓漢是飢不擇食,強行創建,而飽漢則會挑挑食。

//餓漢式
Class A{

private static A a=new A();

private A(){}

public A getA(){

return a;

}

}


//飽漢式
class B{

private static B b;

private B(){}

public B getB(){

if(b!=null){

return b;

}else{

b=new B();

retrun b;

}

}

}



獸王對多線程情況下單例迷失應用的處理是:
 public class Singleton {  

private Singleton(){

}
//靜態內部類
static class SingletonInner{
static Singleton instance = new Singleton();
}
public static Singleton getInstance(){
return SingletonInner.instance;
}
}


原因:使用靜態內部類!它是由一個叫Bob Lee的人寫下來的(最初忘記了是哪兩個人提出)。在加載singleton時並不加載它的內部類SingletonInner,而在調用 getInstance()時調用SingletonInner時才加載SingletonInner,從而調用singleton的構造函數,實例化 singleton,從而在不需要同步的情況下,達到延遲初始化的效果。


文中的內容均是獸王Rjx2008的出品,[url=http://rjx2008.iteye.com/blog/340083]鏈接[/url]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章