23種設計模式1 單例模式

2021-10-21 21:11:21 字數 2433 閱讀 5471

單例模式:採取一定的方法保證在整個的軟體系統中,對某個類***只能存在乙個物件例項***,並且該類只提供乙個取得其物件例項的方法。比如:sessionfactory

​ ① 構造器私有化

​ ② 類的內部建立物件

​ ③ 向外暴露乙個靜態的公共方法

2.2.1 方式一

public

class

singleton

// 2.類的內部建立物件

private

final

static singleton instance =

newsingleton()

;// 3.向外暴露乙個靜態的公共方法

public

static singleton getinstance()

}

優缺點:

① 這種寫法簡單,就是在類裝載的時候就完成了例項化,避免了在多執行緒中的同步問題。

② 在類裝載的時候就完成例項化,如果從始至終都沒有用過這個例項,則會造成記憶體的浪費。

2.2.2 方式二

public

class

singleton

// 2.類的內部建立物件

private

static singleton instance;

// 在靜態**塊中建立單例物件

static

// 3.向外暴露乙個靜態的公共方法

public

static singleton getinstance()

}

優缺點:與方式一類似,也是在類裝載的時候執行靜態**塊中的**,初始化類的例項,避免執行緒同步問題,但是也可能造成記憶體浪費。

public

class

singleton

// 懶漢式:提供乙個靜態方法,當使用該方法時才建立例項物件

public

static singleton getinstance()

return instance;

}}

public

class

singleton

// 懶漢式:提供乙個靜態方法,當使用該方法時才建立例項物件

public

static

synchronized singleton getinstance()

return instance;

}}

分析:解決了執行緒不安全的問題,但是降低了同步效率,第一次需要進行初始化,後面就可以直接return。

public

class

singleton

// 懶漢式:提供乙個靜態方法,當使用該方法時才建立例項物件

public

static singleton getinstance()

}return instance;

}}

分析:執行緒不安全,現實開發中不能這樣使用

// double check

public

class

singleton

// 提供乙個靜態方法,當使用該方法時才建立例項物件

// 加入了雙重檢查**,解決執行緒安全問題,同時解決懶載入問題,同時保證了一定的效率,推薦使用

public

static singleton getinstance()

}}return instance;

}}

**演示:

class

singleton

private

static

class

singletoninstance

public

static singleton getinstance()

}

分析:

① 當類singleton裝載的時候,靜態內部類singletoninstance不會進行裝載,只有在使用到的時候才會裝載,實現懶載入的效果。

② 當呼叫getinstance()方法的時候,裝載靜態內部類singletoninstance,jvm在裝載類的時候是執行緒安全的,所以沒有執行緒安全的問題

**演示:

public

class

singletontest

}

enum singleton 

}

單例模式共八種方式:餓漢式(兩種)、懶漢式(四種,包含doublecheck)、靜態內部類、列舉

使用場景:需要頻繁的進行建立和銷毀的物件、建立物件耗時過多或者耗費資源過多(重量級物件),但是又經常需要用到的物件、工具類物件,頻繁訪問資料庫或檔案的物件(比如資料來源、session工廠等)。

23種設計模式 1單例模式

1.單例模式 singleton pattern 是一種簡單的設計模式,它的定義如下 為了確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。2.通用 如下 class singleton 通過該方法獲得例項化物件 public static songleton getinstance...

23種設計模式 (1)單例模式

定義確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項 單例模式優點 單例模式的缺點 單例模式為什不能增加介面?因為對介面對單例模式沒有任何意義,它要求 自行例項化 並提供單一例項,介面或者抽象類不可能被例項化單例的使用場景 在乙個系統中,要求類有且僅有乙個物件,如果出現多個物件會有 不...

23種設計模式 單例模式

某些情況,如 執行緒池,乙個專案中匯流排程數量以及生命週期,可能需要統一控制 如果執行緒池自身可建立多個例項,那麼就無法統一控制,此時,只要能控制線程池物件的數量為乙個,那麼就可以實現統一控制的目標 注意 現實中真正使用純的單例模式並不多 如 spring bean 通過配置來決定是否使用單例 執行...