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

2021-10-22 04:22:00 字數 3572 閱讀 9768

設計模式理論上有:3類23種

【定義】單例模式是一種物件建立模式,用於生產乙個物件的例項,它可以確保系統中乙個類只產生乙個例項。

【單例的好處】

單例模式理論上有:5類8種

餓漢模式——靜態常量

【優點】寫法簡單,類載入時已經完成了例項化,避免了執行緒同步問題

【缺點】會造成記憶體浪費

【建立步驟】

私有化構造器

本類內部建立靜態物件例項

提供獲取靜態例項的方法

class

hungryman

//2.本類內部建立靜態物件例項

private

static hungryman instance =

newhungryman()

;//3.提供獲取靜態例項的方法

public

static hungryman getinstance()

}

餓漢模式——靜態**塊

【優點】寫法簡單,類載入時已經完成了例項化,避免了執行緒同步問題

【缺點】會造成記憶體浪費

【ps】與餓漢模式——靜態常量相比有點脫褲子放屁的感覺,水平有限暫時看不出與前者相比有何優勢,但**倒是多寫了幾行

【建立步驟】

私有化構造器

宣告靜態變數

在靜態**塊裡面實現例項化物件

提供獲取靜態例項的方法

class

hungryman

//2.宣告靜態變數

private

static hungryman instance;

//3.在靜態**塊裡面實現例項化物件

static

//4.提供獲取靜態例項的方法

public

static hungryman getinstance()

}

懶漢模式——常規懶載入

【優點】的確時起到了懶載入的效果,沒有浪費記憶體

【缺點】只適用於單執行緒,理論上存在,實際開發也不會用到

【建立步驟】

私有化構造器

宣告靜態變數

提供乙個靜態的公有方法,當使用到該方法時才會取建立例項

class

lazyman

//2.宣告靜態變數

private

static lazyman instance;

//3.提供乙個靜態的公有方法,當使用到該方法時,會判斷例項是否為空,然後再去建立例項

private

static lazyman getinstance()

return instance;

}}

懶漢模式——同步方法

【優點】的確時起到了懶載入的效果,沒有浪費記憶體,也解決了執行緒安全問題

【缺點】使用到了同步方法,效率太低,理論上存在,實際開發也不會用到

【建立步驟】

私有化構造器

宣告靜態變數

提供乙個靜態的公有方法,當使用到該方法時才會取建立例項,該方法加上synchronized關鍵字

class

lazyman

//2.宣告靜態變數

private

static lazyman instance;

//3.提供乙個靜態的公有方法,當使用到該方法時,會判斷例項是否為空,然後再去建立例項

private

static

synchronized lazyman getinstance()

return instance;

}}

懶漢模式——同步**塊

【優點】的確時起到了懶載入的效果,沒有浪費記憶體

【缺點】實際上並沒解決執行緒安全問題,理論上存在,實際開發也不會用到

【建立步驟】

私有化構造器

宣告靜態變數

提供乙個靜態的公有方法,當使用到該方法時才會取建立例項,建立例項時使用同步**塊

class

lazyman

//2.宣告靜態變數

private

static lazyman instance;

//3.提供乙個靜態的公有方法,當使用到該方法時才會取建立例項,建立例項時使用同步**塊

private

static lazyman getinstance()

}return instance;

}}

【優點】多執行緒可用,實現延遲載入,效率高

【缺點】暫無發現

【建立步驟】

私有化構造器

宣告靜態變數

提供乙個靜態的公有方法,當使用到該方法時才會取建立例項,過程進行雙重檢查

class

doublecheck

//2.宣告靜態變數

private

static doublecheck instance;

//3.提供乙個靜態的公有方法,當使用到該方法時才會取建立例項,過程檢查兩次

private

static

synchronized doublecheck getinstance()

}}return instance;

}}

【優點】用類載入機制保證初始化時執行緒安全;保證懶載入(靜態內部類只有呼叫getinstance方法的時候才會載入,在singleton例項化的時候不會載入),且效率高

【缺點】暫無發現

【ps】

【建立步驟】

私有化構造器

建立靜態內部類,該類中有乙個singleton的靜態變數instance

提供乙個靜態的公有方法,獲取上一步的instance

class

singleton

//2.建立靜態內部類,該類中有乙個singleton的靜態變數instance

private

static

class

staticinnerclass

//3.提供乙個靜態的公有方法,獲取上一步的instance

public

static

synchronized singleton getinstance()

}

【優點】沒缺點就是它最大的優點

【缺點】暫無

【建立步驟】太簡單了直接看**吧

如果你覺得本文在某個時刻帶給了你一些新的體會,

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

單例模式只允許建立乙個物件,因此節省記憶體,加快物件訪問速度。1.需要頻繁例項化然後銷毀的物件。2.建立物件時耗時長,耗資源,又經常用到的物件。3.頻繁訪問資料庫或檔案的物件 4.工具類物件 在類載入的時候不被初始化 不加synchronized執行緒不安全,加synchronized保證執行緒安全...

設計模式一分鐘之Adapter

將兩個不相關的類組合在一起使用,需要用到adapter模式。乙個是adaptee,乙個是adapter。實際上,兩個不相關的類想要組合在一起使用,可以修改類的介面,但是,如果我們不想修改介面,或者根本沒有源 就需要使用adapter模式。實現方法 有兩種方法,組合composition 和 繼承in...

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

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