什麼是單例模式?
顧名思義,單例模式,就是對應類自始至終就只有一 例項物件。因為其建構函式私有化,所以不能再類外建立物件。利用靜態成員方法通過類的公有來訪問類的私有方法,從而達到構造乙個例項物件。建構函式宣告為private或protect防止被外部函式例項化,內部儲存乙個private static的類指標儲存唯一的例項,例項的動作由乙個public的類方法代勞,該方法也返回單例類唯一的例項
單例模式有兩種型別特點?
單例模式有懶漢和餓漢兩種型別的模式,下面介紹這兩種模式的具體情況即實現以及特性。
懶漢模式:
從字面意思了解到,懶漢,就是在將要使用的時候才去建立例項物件,如下**所示:
class signle
static signle *psig_;
pthread_mutex_t mutex_;
signle* signle::psig_ = null;
如上為懶漢情況,但是懶漢模式是非執行緒安全的。當如果兩個執行緒同時使用該物件是,就會出現進行兩次的建立例項,會出現錯誤。解決方法,可以使用互斥鎖來進行執行緒同步,避免執行緒不安全問題。如上**所示。
餓漢模式:
字面意思是餓了就會飢不擇食,即從一開始就建立好物件的模式。從而保證類自始至終只有乙個物件存在。
class signle
proteced:
signle(){}
pirvate:
static signle *psig_;
signle* signle::psig_ = new signle();
在初始化的時候直接建立好對應的物件,使用時直接使用即可。
如上**在編譯階段就建立好物件,所以餓漢模式是執行緒安全的。
除此之外,實際中為了避免再具體類中需要單利,避免寫重複**需要,利用模版單例模式,如下**所示,
template
class signle
static t* pins;
public:
static t* getinstance()
~test(){}
void nameinfo(){
std:;cout<<"i am test"int main(){
testhandle::getinstance()->nameinfo();
return 0;
通過模板類實現利用更可減少**的冗餘,提高**簡潔可讀性。
java設計模式之單利模式
在我們做開發的時候,有些類的例項每次都new乙個出來是沒有必要的,因為它太占用記憶體咯。因此,單利模式有了它的用武之地了。最簡單的單利模式如下 private static logcathelper instance null public static logcathelper getinstan...
23設計模式之單利設計模式
單利設計模式設計的類有且只有乙個例項物件 單例設計模式只應在有真正的 單一例項 的需求時才可使用。私有化構造方法,有幾個構造方法就私有化幾個,保證其他地方不能例項化本類物件。本類中建立乙個本類的例項化物件。提供乙個能夠返回本類物件的方法。餓漢式 在建立類屬性時,建立乙個本類物件引用並直接new出物件...
設計模式 單利模式
單例模式的核心是保證乙個類只有乙個例項,並且提供乙個訪問例項的全域性訪問點。1 spring中bean物件的模式實現方式 2 servlet中每個servlet的例項 3 springmvc框架中,控制器物件是單例模式 4 專案中,讀取配置檔案的類,一般也只有乙個物件。沒有必要每次使用配置檔案資料,...