單例模式屬於建立型的設計模式,其特點是在於保證乙個類只會被例項化一次,可以作為全域性唯一資源提供給系統。
此處通過判斷兩個例項的位址是否一致來驗證單例模式,**中包含了保證多執行緒安全的單例模式實現。由於python下的懶漢單例模式實現本人覺得是不可能的,因此下面使用了double check的方式實現了單例模式的餓漢實現。
檔案構成:
—include
——singleton.h
—src
——singleton.cpp
——main.cpp
**如下:
—include/singleton.h
#ifndef _singleton_h_
#define _singleton_h_
#include
class singleton
; static gabor gabor;
};#endif
—src/singleton.cpp
#include
#include"singleton.h"
using namespace std;
singleton* singleton::instance = null;
pthread_mutex_t
singleton::mutex;
singleton::gabor
singleton::gabor;
singleton::singleton()
singleton* singleton::getinstance()
pthread_mutex_unlock(&mutex);
}return instance;
}singleton::gabor::~gabor
()
—src/main.cpp
#include"singleton.h"
#include
using
namespace
std;
int main()
檔案構成:
—singleton.py
**如下:
—singleton.py(說明:python中由於沒有辦法像 c++那樣將建構函式設定為private屬性從而實現不允許例項化,因此我們只能從python的類建構函式入手,python的類建構函式是new(cls, *args, **kwargs)函式,而不是init)
import threading
class
singleton
(object):
__instance = none
__lock = threading.lock()
def__init__
(self):
pass
def__new__
(cls, *args, **kwargs):
ifnot cls.__instance:
cls.__lock.acquire()
ifnot cls.__instance:
cls.__instance = super(singleton, cls).__new__(cls, *args, **kwargs)
cls.__lock.release()
return cls.__instance
if"__main__" == __name__:
instance1 = singleton()
instance2 = singleton()
if id(instance1) == id(instance2):
print
"this is a successful singleton."
else:
print
"this is not a successful singleton."
設計模式4 單例模式
保證乙個類僅有乙個例項,並提供乙個訪問他的全域性訪問點。所有類都有構造方法,假如不對他進行編碼,系統會生成空的public 的構造方法,外部類就能建立這個類的物件。為了不讓其他類能new出這個類的例項,所以需要寫乙個private 的構造方法 其實即使使用private修飾,通過反射機制還是能在外部...
設計模式 4 單例模式
單例模式用來確保乙個類只有乙個例項,並提供乙個全域性訪問點。在所有的設計模式中,單例模式是最簡單也是最常用的一種設計模式,它只為乙個例項提供乙個全域性物件,內次嘗試去獲取乙個類的例項的時候,保證獲取到的都是這乙個物件。下面是關於單例模式中的一些小概念 餓漢式和懶漢式區別 餓漢就是類一旦載入,就把單例...
設計模式 4 單例模式
應用最廣的模式 單例模式。1 餓漢模式,僅下面 時,效果是懶載入的,如果這個類中有其他靜態域x,對x引用會載入類,還有就是使用掃瞄型別進行反射使用也會載入類 author cheng description 餓漢式,執行緒安全 since 2020 9 7 20 26 public class si...