常用設計模式(二) 單例模式

2021-08-16 22:05:25 字數 1871 閱讀 9705

單例模式:是一種常見的設計模式,在它的核心結構中值有乙個被稱為單例的類,乙個類只有乙個例項,即乙個類只被建立了一次。

一:單例模式都是使用靜態方法建立的,所以單例物件在記憶體中靜態共享區中儲存

原因:

類中方法被呼叫的形式:建立類的物件呼叫方法,直接用類名呼叫;在類名直接呼叫的過程中,類中方法必須是靜態的,然而靜態方法不能訪問非靜態成員變數。所以該類中自定義變數必須是靜態的。

單例模式分類:懶漢模式和餓漢模式 ;

第1種:懶漢模式(執行緒不安全)

public

class singleton

public

static singleton getinstance()

return instance;

}}

第2種:懶漢模式(執行緒安全)
public

class

singleton

/*** 但是由於synchronized鎖機制,效率低

*@return

*/public

static

synchronized singleton getinstance()

return instance;

}}

第3種:餓漢模式
public

class

singleton

/*** 在類載入過程中就直接例項,載入時候慢,但使用時候比較快

*@return

*/public

static

synchronized singleton getinstance()

}

第4種:餓漢(變種)
public

class

singleton

private

singleton(){}

/*** 在類載入過程中就直接例項,載入時候慢,但使用時候比較快

*@return

*/public

static

synchronized singleton getinstance()

}

第5種:靜態內部類
public

class

singleton

private

singleton(){}

/*** 這種方式同樣利用了classloder的機制來保證初始化instance時只有乙個執行緒,

* 它跟第三種和第四種方式不同的是(很細微的差別):

* 第三種和第四種方式是只要singleton類被裝載了,那麼instance就會被例項化(沒有達到lazy loading效果),

* 而這種方式是singleton類被裝載了,instance不一定被初始化。

* 因為singletonholder類沒有被主動使用,只有顯示通過呼叫getinstance方法時,

* 才會顯示裝載singletonholder類,從而例項化instance。想象一下,如果例項化instance很消耗資源,

* 我想讓他延遲載入,另外一方面,我不希望在singleton類載入時就例項化,

* 因為我不能確保singleton類還可能在其他的地方被主動使用從而被載入,

* 那麼這個時候例項化instance顯然是不合適的。這個時候,這種方式相比第三和第四種方法就顯得更合理

*@return

*/public

static

final singleton getinstance()

}

第6種:列舉(基本上不常見)
public

enum singleton

}

常用設計模式 單例模式

1.單例模式的特點 1.單例類在系統中僅有乙個例項 2.單例類必須自己建立自己的例項 3.單例類必須向系統中的其他物件提供這個例項 2.單例模式的兩種模式 public class test 2.1 餓漢模式 public class singleton 建立類的唯一例項 private stati...

常用設計模式 單例模式

一 單例模式定義 單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,執行緒池 快取 日誌物件 對話方塊 印表機 顯示卡的驅動程式物件常被設計成單例。這些應用都或多或少具有資源管理器的功能。每台計算機可以有若干個印表機,但只能有乙個printer spooler,...

常用設計模式 單例模式

應用執行過程當中,只有乙個物件的模式,叫做單例模式 1.構造器私有 2.提供可以獲得物件的靜態方法 3.將物件設定為靜態 懶漢模式 用的時候再建立 餓漢模式 載入的時候就建立 public class singleton 構造器私有,無法在外部例項化這個物件 外部一千一萬個物件也都只能是對perso...