設計模式 4 單例模式

2021-07-27 09:05:29 字數 2072 閱讀 9522

單例模式屬於建立型的設計模式,其特點是在於保證乙個類只會被例項化一次,可以作為全域性唯一資源提供給系統。

此處通過判斷兩個例項的位址是否一致來驗證單例模式,**中包含了保證多執行緒安全的單例模式實現。由於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...