OC程式設計之道 建立物件之單例模式

2022-08-31 03:36:13 字數 1363 閱讀 9416

一 何為單例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 方法...