單例模式的特點:
1、該類只有乙個例項
2、該類在內部建立該例項
3、向整個系統公開這個例項介面
適用於多執行緒的四種程式設計方式:
第一種
將建構函式設為私有可以保證其他類不能從這個類派生或者建立類的例項
另外:析構函式私有化則是為了讓某個類只能通過new來建立
class
singletion1
pthread_mutex_unlock(&mutex);
}return obj;
}private:
singletion1(){}
static pthread_mutex_t mutex;
static singletion1 obj;
}
這裡解釋一下為什麼要要判斷兩次if(obj == null),如果沒有第一次判斷是可以的
static singletion1* getinstance()
pthread_mutex_unlock(&mutex);
return obj;
}
只是每次用到這個例項的時候都會進入此函式,獲得鎖,判斷,釋放鎖,而除第一次會進入這個函式外,其他的獲得鎖釋放鎖都會降低效率。
內層的判斷是必不可少的:
static singletion1* getinstance()
return obj;
}
比如在還沒有建立例項的情況下,有兩個執行緒a和b,aif(obj == null)後進入條件獲得鎖執行new,bif(obj == null)後進入條件等待鎖(阻塞),等a建立完畢後釋放鎖,此時b獲得鎖執行new操作,注意注意,b執行new之前a已經建立好乙個例項了,所以已經出錯。
第二種(c#)
class singletion2
}private:
singletion2(){}
static singletion2 obj = new singletion2();
}
這種方法在呼叫介面時建立的物件,而是第一次用到singletion2時就建立好了。
另外:sealed 修飾符表示密封用於類時,表示該類不能再被繼承
第三種
class singletion3
}private:
singletion3(){}
static singletion2 obj = new singletion3();
}
第四種
class
singletion3
public
static singletion3 instance
}class
nested
internal
static readonly singletion3 instance = new singletion3();}}
第四種可在呼叫介面時再呼叫建構函式。
另外,internal 修飾符使類、介面或成員僅在當前包中可見。 當前包之外的**不能訪問 internal 成員。
應用場景
單例模式應用的場景一般發現在以下條件下:
(1)資源共享的情況下,避免由於資源操作時導致的效能或損耗等
(2)控制資源的情況下,方便資源之間的互相通訊。
具體的沒用過也不清楚,目前遇到的問題好像並沒有需要單例,以後補充。
C 設計模式 1 單例模式
最近在設計模式的一些內容,主要的參考書籍是 head first 設計模式 同時在學習過程中也檢視了很多中關於設計模式的一些文章的,在這裡記錄下我的一些學習筆記,一是為了幫助我更深入地理解設計模式,二同時可以給一些初學設計模式的朋友一些參考。首先我介紹的是設計模式中比較簡單的乙個模式 單例模式 因為...
C 設計模式 1 單例模式
原文 c 設計模式 1 單例模式 最近在設計模式的一些內容,主要的參考書籍是 head first 設計模式 同時在學習過程中也檢視了很多中關於設計模式的一些文章的,在這裡記錄下我的一些學習筆記,一是為了幫助我更深入地理解設計模式,二同時可以給一些初學設計模式的朋友一些參考。首先我介紹的是設計模式中...
C 設計模式 1 單例模式
最近在設計模式的一些內容,主要的參考書籍是 head first 設計模式 同時在學習過程中也檢視了很多中關於設計模式的一些文章的,在這裡記錄下我的一些學習筆記,一是為了幫助我更深入地理解設計模式,二同時可以給一些初學設計模式的朋友一些參考。首先我介紹的是設計模式中比較簡單的乙個模式 單例模式 因為...