設計模式之單例模式

2021-08-27 03:12:16 字數 1700 閱讀 1438

設計模式代表了最佳的實踐。是軟體開發人員在軟體開發過程中面臨的一般問題的解決方法。這些解決方案是眾多軟體開發人員經過相當長一段時間的試驗和經驗錯誤總結出來的。

所以,設計模式是一套被反覆使用的,多數人知曉、經過分類編目的、**設計經驗的總結。

class singleton

return _sintance;

}private:

//定義建構函式為私有

singleton(int data = 0)

:_data(data)

{} //防拷貝

singleton(singleton& s);

singleton* operator=(singleton& s);

//定義乙個指向例項的指標,如果為空,就可以建立例項,否則就不能建立

static singleton* _sinstance;

int _data;

};singleton::_sinstance = null;

上面的**可以實現乙個最簡單的單例模式。可是執行緒不安全,這個問題該如何解決呢?

給臨界區**加鎖就好了。

#include class singleton

_mtx.unlock();

return _sintance;

}private:

//定義建構函式為私有

singleton(int data = 0)

:_data(data)

{} //防拷貝

singleton(singleton& s);

singleton* operator=(singleton& s);

//定義乙個指向例項的指標,如果為空,就可以建立例項,否則就不能建立

static singleton* _sinstance;

int _data;

mutex _mtx;

};singleton::_sinstance = null;

singleton::_mtx;

可是這樣又有了新的問題,如果在鎖的操作中拋了異常,就有可能會導致死鎖的情況發生;於是想辦法將它向智慧型指標一樣管理起來,讓系統自動的申請鎖和釋放鎖:使用基於raii思想實現的lock_goard(c++11)。

最後,還有乙個問題,在實際中,我們只要在第一次的時候加鎖就好了,否則就會影響效率:

singleton* getinstance()

_mtx.unlock();

} return _sintance;

}

class singleton

private:

//定義建構函式為私有

singleton(int data = 0)

:_data(data)

{} //防拷貝

singleton(singleton& s);

singleton* operator=(singleton& s);

//定義乙個指向例項的指標

static singleton* _sinstance;

int _data;

};singleton::_sinstance = new singleton();

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...

設計模式之單例模式

package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...

設計模式之 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...