JAVA設計模式(一)單例模式

2021-08-20 09:57:26 字數 1434 閱讀 3848

單例類只能有乙個例項。

單例類必須自己建立自己的唯一例項。

單例類必須給所有其他物件提供這一例項。

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 懶漢模式可以延遲載入,但是執行緒不安全,得加鎖 餓漢模式執行緒安全,但是不能延遲...