singleton(單例)模式是最常見的,最容易實現,最應該掌握的設計模式。
單例模式解決的問題非常常見:如何去建立唯一的乙個類物件(變數)?在c++語言中,通常維護乙個靜態成員變數來記錄這乙個唯一的物件,再通過乙個靜態介面instance來獲取這乙個例項。
結構圖如下:
完整**如下:
#ifndef singleton_h
#define singleton_h
#include
using
namespace
std;
class singleton
return _instance;
}protected:
singleton()
private:
static singleton* _instance;
};singleton* singleton::_instance = 0;
#endif // singleton_h
#include "singleton.h"
using
namespace
std;
int main()
singleton不能被初始化,因此建構函式被宣告為protected或者private。
上述是執行緒不安全的,兩個執行緒同時首次呼叫instance()
方法,兩個執行緒會同時構造乙個`_instance
例項,這是錯誤的。
懶漢模式:第一次用到類例項時才會類例項化。
餓漢模式:在定義單例模式時就進行例項化。
懶漢模式為了執行緒安全必須加鎖:
singleton* singleton::instance()
pthread_mutex_lock(&mutex);
}return _instance;
}
餓漢模式:在定義時例項化(執行緒安全的)
singleton* singleton::_instance
=new singleton();
singleton* singleton::instance()
設計模式之單例模式
前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會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...