一 何為單例singleton模式?(what)
保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點。
二 何時使用單例模式?(where)
1類只能有乙個例項,而且必須從乙個為人熟知的訪問點對其訪問,比如工廠方法。
2這個唯一例項只能通過子類化進行擴充套件,而且擴充套件的物件不會破壞客戶端**。
為什麼不用靜態全域性變數或是類方法呢?
如果乙個程式中兩個人分別在兩個地方定義了相同型別的靜態變數。那麼乙個程式中就會有兩個相同的全域性物件型別。
類方法提供了共享服務,不用建立其物件就可以訪問,資源的唯一例項可以在類方法中進行維護。但是如果累需要被子類化以提供更好的服務,這一方式就不靈活。
三 實現單例模式 (how)
static singleton *sharedsingleton_=nil;
+(singleton *)sharedinstance
if(sharedsingleton_==nil)
- (id)copywithzone:(nszone *)zone
- (nsuinteger)retain
- (nsuinteger)retaincount
- (void)release
- (id)autorelease
alloc使用設為null的zone來呼叫allocwithzone:在預設區域為新例項分配記憶體。
四 子類化單例
如果用以上的方法,不做修改的子類化singleton時,返回的例項總是singleton,因為singleton過載了所有例項化相關的方法。
解決方法:
+(singleton *)sharedinstance
if(sharedsingleton_==nil){
sharedsingleton = [nsallocateobject([self class],0,null) init];
return sharedsingleton_;
第乙個引數是型別,第二個引數是用於索引例項變數的額外位元組數總是0,第三個引數用於指定記憶體中分配的區域一般為null表示預設區域。可以通過指定類的型別,用這個函式例項化任何物件。
五 還要注意單例物件的執行緒安全
@synchoronized()或nslock或是dispatch_once
OC程式設計之道 建立物件之生成器模式
生成器模式也叫建造者模式,一般是用來構造複雜物件的一種模式。client 客戶 director 指導者 builder 構造者 product 產品 生成器模式能幫助構建設計部件與表現的各種組合的物件。否則知道構建物件所有細節的director可能會變成乙個龐大的 神 類。但是在做應用的時候一般不...
單例模式之 物件的建立
類載入檢查 檢查這個指令的引數是否能在常量池中定位到乙個類的符號引用,並且檢查這個符號引用代表的類是否已被載入 解析和初始化過。如果沒有,那必須先執行相應的類的載入過程。具體 參考 文章很棒 看完以後對類的載入和物件的分配打個比方 jvm 你們把他想象成乙個 公司 乙個加工廠類似富士康 類 乙個做產...
Python物件導向程式設計之單例設計模式
設計模式 設計模式是前人工作的總結和提煉,通常,被人們廣泛流傳的設計模式都 是針對某一特定問題的成熟解決方案 使用設計模式是為了可重用 讓 更容易被他人理解,保證 可靠性。單例設計模式 目的 讓類建立物件,在系統中只有唯一的乙個例項 物件 每一次執行類名 返回的物件 記憶體位址是相同的 new 方法...