設計模式 單例模式

2021-09-20 05:48:30 字數 1628 閱讀 4004

單例模式最初的定義出現於《設計模式》(addison-wesley,1994)

單例模式:保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

單例模式的類圖如下:

單例模式

單例模式幾乎是設計模式的最簡單形式了,這一模式的意圖是使得類的乙個物件成為系統中的唯一例項。要實現這一點,可以從客戶端對其進行例項化開始。因此需要一種只允許生成物件類的唯一例項的機制,「阻止」所有想要生成物件的訪問。我們可以用工廠方法來限制例項化的過程。這個方法應該為靜態方法(類方法),因為我們讓類的例項去生成另乙個唯一例項毫無意義。

static uniqueinstancesingleton的唯一例項,static sharedinstance將它返回給客戶端。通常,sharedinstance會檢查uniqueinstance是否已經被例項化,如果沒有,它會生成乙個例項後返回uniqueinstance

何時使用原型模式?

在以下情形,會考慮使用原型模式:

類只有乙個例項,而且必須從乙個為人熟知的訪問點對其進行訪問,比如工廠方法;

這個唯一例項只能通過子類化進行擴充套件,而且擴充套件的物件不會破壞客戶端**。

使用cocoa touch框架中使用單例模式

cocoa touch框架中使用了大量的單例類。下面討論其中的幾個:

2.uiacceleremeter類

cocoa touch框架中另乙個常用的單例是uiacceleremeter.uiacceleremeter讓應用程式可以註冊,以接收來自ios裝置內建的加速度計的加速度的相關資料。應用程式會收到三維空間中沿主軸的線性加速度變化,可以使用這一資料檢測裝置的當前方向和當前方向的瞬間變化。

uiacceleremeter是單例,所以不能直接生成它的物件。而是應該呼叫其sharedacceleremeter單例類方法以訪問它的唯一例項。然後設定它的updateinterval屬性,並用自己的delegate物件設定delegate屬性,以接收來自單例例項的加速度資料。

3.nsfilemanager類

在mac os x v10.5和ios2.0之前,nsfilemanager曾經是單例模式的「嚴格」實現。呼叫它的init方法是空操作,並且唯一例項可以通過defaultmanager類方法建立和訪問。然而其單例實現並不是執行緒安全的。現在推薦生成新的nsfilemanager例項以保證執行緒安全。這一方式被認為是更靈活的單例實現,其中工廠方法總是返回同一例項,但是也可以分配並初始化另外的例項。

附上單例模式的demo:designpattern_singleton

設計模式 單例模式

單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...