單例類只能有乙個例項。
單例類必須自己建立自己的唯一例項。
單例類必須給所有其他物件提供這一例項。
private static singleton instance;
private singleton (){}
public static singleton getinstance()
return instance;
}
懶漢式是典型的時間換空間,就是每次獲取例項都會進行判斷,看是否需要建立例項,浪費判斷的時間。當然,如果一直沒有人使用的話,那就不會建立例項,則節約記憶體空間private static singleton instance;
private singleton (){}
public static synchronized singleton getinstance()
return instance;
}
懶漢式單例類實現裡對靜態工廠方法使用了同步化,以處理多執行緒環境。
private static singleton instance = new singleton();
private singleton (){}
public static singleton getinstance()
餓漢式是典型的空間換時間,當類裝載的時候就會建立類的例項,不管你用不用,先建立出來,然後每次呼叫的時候,就不需要再判斷,節省了執行時間。
private volatile static singleton instance = null;
private singleton(){}
public static singleton getinstance()}}
return instance;
}
這種實現方式既可以實現執行緒安全地建立例項,而又不會對效能造成太大的影響。它只是第一次建立例項的時候同步,以後就不需要同步了,從而加快了執行速度。
private static class singletonholder
private singleton (){}
public static final singleton getinstance()
當getinstance方法第一次被呼叫的時候,它第一次讀取singletonholder.instance,導致singletonholder類得到初始化;而這個類在裝載並被初始化的時候,會初始化它的靜態域,從而建立singleton的例項,由於是靜態的域,因此只會在虛擬機器裝載類的時候初始化一次,並由虛擬機器來保證它的執行緒安全性。
這個模式的優勢在於,getinstance方法並沒有被同步,並且只是執行乙個域的訪問,因此延遲初始化並沒有增加任何訪問成本。
Java設計模式(一) 單例模式
對於單例,最早可追溯到我上學那會兒的課程實習,那時候有企業裡的員工給我們進行軟體程式設計培訓,那會兒第一次聽說單例的概念。在印象裡,問 你們知道如何只建立出乙個物件嗎?答 不知道。為什麼只要建立乙個物件 問 聽說過單例嗎?答 沒有,單例是幹啥的?解釋 單例就是保證程式執行期間,保證某乙個類永遠只有乙...
Java設計模式一 單例模式
1 餓漢式 在呼叫之前會首先例項化.優點 寫法簡單,避免了執行緒同步問題。缺點 在呼叫之前就會例項化,沒有達到lazy loading的效果。如果自始至終都沒有使用過這個實力,就會造成記憶體浪費。注意 1 載入順序,先靜態再動態,先屬性再方法,先上後下。2 構造方法要是私有化的,3 屬性要用fina...
JAVA 設計模式(一)單例模式
懶漢模式 public class singlelh public singlelh getinstance 餓漢模式 public class singlelh public singlelh getinstance 懶漢模式可以延遲載入,但是執行緒不安全,得加鎖 餓漢模式執行緒安全,但是不能延遲...