設計模式 單例模式

2021-07-27 22:21:53 字數 1715 閱讀 9770

提到設計模式,首先要提到的就是單例模式。單例模式是設計模式中最簡單最常用的一種模式,其思路就是:確保乙個類只有乙個例項,並且提供乙個全域性訪問點。

為什麼會需要單例模式呢?因為開發過程中經常會碰到乙個數量有限的資源,比如說印表機,任務管理器等等,在對這些資源進行開發設計的過程中自然而然就衍生出了單例這種模式。

下面我就列舉一下大家常用的**實現。

首先是最簡單經典的餓漢模式,**如下:

///

/// 餓漢單例模式,無論是否呼叫,都會占用系統資源

///public

class hungrysingleton

public

static hungrysingleton getinstance()

}

此方法簡單好記,但有乙個明顯的缺點就是,不管用不用得上此單例,系統都會初始化並占用資源,基於這個問題,就衍生出了懶漢模式。

///

/// 懶漢單例模式,使用時才會建立單例,但是不適用高併發多執行緒

///public

class lazysingleton

public

static lazysingleton getinstance()

return instance;

}}

懶漢模式很好地解決了資源占用問題,但是在多執行緒的環境下,容易產生多個例項,於是在懶漢模式的基礎上,又出現了鎖定單例模式。

///

/// 鎖定單例模式,保證了唯一性,但是每次活動單例都要獨佔,有效能瓶頸

///public

class locksingleton

public

static locksingleton getinstance()

}return instance;

}}

鎖定單例模式解決了懶漢模式的併發問題,但是在高併發的環境下,有效能瓶頸,所有的單例請求都要被lock一次。對於這個問題,目前大家常用的解決方案是,再加一把鎖,也就是雙重鎖定單例模式。

///

/// 雙重鎖單例模式,絕大多數情況下,能保證唯一性

///public

class doublelocksingleton

public

static doublelocksingleton getinstance()}}

return instance;

}}

除此之外,還有乙個比較不錯的方案,就是內部靜態類單例模式,同樣也可以實現多執行緒高併發環境下的延遲載入。其使用的原理就是,靜態成員是在類首次被使用時完成例項化過程

///

/// 靜態內部類單例模式,執行緒安全

///public

class staticsingleton

internal

static staticsingleton instance = new staticsingleton();

}private

staticsingleton()

public

static staticsingleton getinstance()

}

總結

介紹了這麼多中玩法,我希望大家(特別是初學者)能對單例模式有乙個更加深入的理解。

設計模式 單例模式

單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...

設計模式 單例模式

class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...

設計模式 單例模式

單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...