設計模式之單利模式

2021-08-21 10:38:26 字數 1199 閱讀 7111

什麼是單例模式?

顧名思義,單例模式,就是對應類自始至終就只有一 例項物件。因為其建構函式私有化,所以不能再類外建立物件。利用靜態成員方法通過類的公有來訪問類的私有方法,從而達到構造乙個例項物件。建構函式宣告為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 專案中,讀取配置檔案的類,一般也只有乙個物件。沒有必要每次使用配置檔案資料,...