設計模式之單例模式

2021-08-15 12:06:05 字數 1800 閱讀 1968

最近一直在看設計模式,今天就單例模式做乙個總結。

概念單例模式(

singleton pattern

)算是比較常見的設計模式之一,屬於建立型設計模式。顧名思義,單例模式就是在程式中乙個類

只有乙個例項。

使用場景

耗時任務的例項建立

耗記憶體的例項的建立

單例模式分為兩類:立即載入和懶惰載入,立即載入就是在使用類的時候就已經載入完畢。懶惰載入,就是使用時載入。

立即載入

package cn.scorista;

public class singletonclass2

public singletonclass2 createinstance()

}

將例項設定成靜態變數,程式在執行時就已經載入到記憶體中,在呼叫前就已經建立完畢。構造方法設定成

private

,防止通過構造方法建立例項。

懶惰載入

一般情況,我們會這樣寫,定義乙個靜態變數,當靜態變數為空時建立例項,否則返回,這樣可以實現單例模式。

package cn.scorista;

public class singletonclass

public static singletonclass createinstance()

return singletoninstance; }

public void show()

}

我們來執行一下程式:

public class main 

}}

執行結果為:

這種方式,如果我們在多執行緒的情況下,看是否實用,建立執行緒類,繼承

thread

類:

public class threaddemo extends thread

@override

public void run()

}

執行主程式:

public class main 

}

執行結果:

實踐證明,這種方式只適合單執行緒的情況。在多執行緒的情況下,依然會多次執行構造方法,建立多個例項。那我們要解決這個問題,只能通過鎖的方式。

多執行緒的單例模式示例:

public class singletonclass 

public static singletonclass createinstance()

} } catch (interruptedexception e)

} return singletoninstance; }

public void show()

}

執行結果:

關鍵字表示同步,會在類中加乙個同步鎖,只允許乙個執行緒訪問。有人就會問了,為什麼要判斷兩次為空。如果我們只在鎖定的**塊中判斷為空,那所有的執行緒在執行的時候都要等待正在執行的執行緒。如果我們使用兩次判斷,當例項已經建立,我們就不用進入鎖定的**中,從而直接返回例項。

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...

設計模式之單例模式

package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...

設計模式之 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...