一分鐘讀懂設計模式 單例模式

2021-10-09 08:08:00 字數 1907 閱讀 7126

單例模式只允許建立乙個物件,因此節省記憶體,加快物件訪問速度。

1.需要頻繁例項化然後銷毀的物件。

2.建立物件時耗時長,耗資源,又經常用到的物件。

3.頻繁訪問資料庫或檔案的物件

4.工具類物件

在類載入的時候不被初始化

不加synchronized執行緒不安全,加synchronized保證執行緒安全,但是效率低,多數情況下不需要同步。

private static singletonutil instance;

//執行緒不安全

public static singletonutil getinstance()

return instance;

}//執行緒安全

public static synchronized singletonutil getinstance2()

return instance;

}

在類載入時已經完成初始化,執行緒安全

不管用不用,都已經初始化了,有可能這個類一次都用不到

private static singletonutil instance = new singletonutil();

public static singletonutil getinstance()

懶漢式:在類載入時不被初始化,需要使用synchronized才保證執行緒安全,載入快,獲取物件慢。

餓漢式:在類載入就完成了初始化,不用synchronized,執行緒安全,載入慢,獲取快

延遲載入,執行緒安全

public class singletonutil 

public static final singletonutil getinstance()

}

第一次校驗:也就是第乙個if,這個時為了**提高執行效率,由於單例模式只要一次建立例項既可,所以當建立乙個例項之後就不用synchronized進入同步**塊了,直接返回就行了。

第二次校驗:也就是第二個if,這個校驗是防止二次建立例項,例如有一種情況,當singleton還沒有建立時,執行緒t1呼叫getinstance方法,由於第一次判斷signleton==null,此時執行緒t1準備繼續執行,但是資源被執行緒t2搶占,此時t2也呼叫了getinstance()方法,同樣由於singleton沒有例項化,t2同樣可以通過第乙個if,然後繼續往下執行同步**塊,第二個if也通過了,然後t2建立了乙個例項singleton。此時t2完成任務,資源回到t1執行緒,t1也進入同步**塊,如果沒有第二個if,那麼t1也會建立乙個singleton例項,那麼就會出現建立多個例項的情況,但是加上第二個if,就可以完全避免這個多執行緒導致多次建立例項的問題。

public class singletonutil }}

return singletonutil;

}}

singletonutil = new singletonutil()不是原子操作,jvm做了三件事:

1.給singletonutil分配記憶體

2.呼叫singletonutil的建構函式來初始化,建立物件

3.將singletonutil物件指向分配的記憶體空間(執行完這步 singleton才是非 null了)

由於指令重排,可能是1-2-3也可能是1-3-2,如果是1-3-2,那麼執行完3之後,2之前,執行緒2來執行這裡,在第乙個null判斷時,就直接返回,但此時singletonutil只有記憶體位址,沒有執行2建立物件,那麼後續使用就報錯。

一分鐘讀懂設計模式 工廠模式

1具體的工廠類有乙個create的方法,利用if switch返回具體產品2create方法通常時靜態,所以也叫靜態工廠。缺點 擴充套件性差,要增加乙個產品,還需要修改工廠類方法 不同產品需要不同額外的引數時,不支援。麵條,最好都用介面 public inte ce inoodles public ...

一分鐘讀懂設計模式 責任鏈模式

使用場景 責任鏈一般用於處理流程節點之類的實際業務場景中。責任鏈主要重在責任分離處理,讓各個節點各司其職。缺點 責任鏈如果很長,除錯比較麻煩。比如請假申請,組長只審批小於2天的假,否則交給主管審批,主管只審批小於5天的假,否則交給經理審批,由經理做決定。抽象 審批人,true 審批通過,false ...

一分鐘入門設計模式之單例模式

設計模式理論上有 3類23種 定義 單例模式是一種物件建立模式,用於生產乙個物件的例項,它可以確保系統中乙個類只產生乙個例項。單例的好處 單例模式理論上有 5類8種 餓漢模式 靜態常量 優點 寫法簡單,類載入時已經完成了例項化,避免了執行緒同步問題 缺點 會造成記憶體浪費 建立步驟 私有化構造器 本...