單例模式最初的定義出現於《設計模式》(addison-wesley,1994)
單例模式:保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式的類圖如下:
單例模式
單例模式幾乎是設計模式的最簡單形式了,這一模式的意圖是使得類的乙個物件成為系統中的唯一例項。要實現這一點,可以從客戶端對其進行例項化開始。因此需要一種只允許生成物件類的唯一例項的機制,「阻止」所有想要生成物件的訪問。我們可以用工廠方法來限制例項化的過程。這個方法應該為靜態方法(類方法),因為我們讓類的例項去生成另乙個唯一例項毫無意義。
static uniqueinstance
是singleton
的唯一例項,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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...