單例模式的那些事

2021-08-02 18:26:26 字數 2029 閱讀 8018

寫在前面

單例singleton設計模式, 老生常談的乙個設計模式。但你真的用對了麼? 用的姿勢很重要!

單例顧名思義就是只產生乙個例項物件。那怎樣保證單一呢?把目標類提供給外部建立例項物件的能力收回,即建構函式設為私有,然後內部提供乙個生成例項靜態方法。設計成單例模式, 有各種各樣的實現方式。

2.1 餓漢式單例

餓漢式單例是指在方法呼叫前,例項就已經建立好了。

- 實現**:

public

class singleton

public

static singleton getinstance()

}

public

class

singletonclient

});}

for (thread thread : threads)

}}

165827088

165827088

165827088

165827088

165827088

165827088

165827088

165827088

165827088

165827088

2.2 懶漢式單例

懶漢式單例是指在方法呼叫獲取例項時才建立例項,因為相對餓漢式顯得「不急迫」,所以被叫做「懶漢模式」。

1)單執行緒的懶漢式單例 – 初學者最容易犯錯的寫法.

public

class singleton

public

static singleton getinstance() catch (interruptedexception e)

instance = new singleton();

}return instance;

}}

上面建立單例在單執行緒下是木問題的。但在多執行緒訪問下就會有問題啦。

如何改進呢?來,再往下看

2)執行緒安全的懶漢式單例.

public

class singleton

public synchronized static singleton getinstance()

return instance;

}}

public

class singleton

public

static singleton getinstance()

}} catch (exception e)

return instance;

}}

public

class singleton

public

static singleton getinstance()

}} catch (exception e)

return instance;

}}

3)使用靜態內建類實現單例模式.

public

class singleton

private

static

class singletonhandler

public

static singleton getinstance()

}

4)使用靜態**塊實現單例模式

public

class singleton

private

singleton()

public

static singleton getinstance()

}

七種單例模式的那些事

public class singleton1 餓漢式 靜態變數 私有化構造方法 private singleton1 建立內部靜態例項 private final static singleton1 instance new singleton1 提供公有的get例項方法 public stati...

設計模式那點事 單例模式

單例模式,也許是我們平常用得和接觸比較多的設計模式了,很多朋友在企業面試的時候都會被問到。說起這裡,我想起了當初畢業面試時那張口結舌的醜態,心中總會多少有些愧疚,痛恨自己基礎實在是糟糕。好吧,讓我們回到主題,什麼是單例模式呢?概念 單例模式 singleton 它保證了乙個類僅有乙個例項,並提供乙個...

設計模式二三事 單例模式

一 單例模式 單例模式模式能夠保證乙個類的物件例項只有乙個,具體的做法是將類的建構函式設定為私有或者受保護,然後再提供乙個靜態介面,通過該介面可以建立或者獲取該類的唯一例項物件,具體的 如下表示 class singleton public static singleton getinstance ...