設計模式 10 單例模式

2022-07-17 06:51:10 字數 2659 閱讀 5054

單例模式(singleton)簡介:

單例模式保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。使用單例模式能夠讓設計師快速獲取提供某項服務或者功能的物件,可以省去層層傳遞物件的困擾。

單例模式在實現時,需要程式語言的支援,需要程式語言具有靜態類屬性靜態類方法以及可重新定義建構函式的訪問修飾符,具有這3項語句功能的程式語言就可以實現單例模式。

singleton單例類:

//file: singleton.h

#pragma once

class singleton

;

//file: singleton.cpp

#include "pch.h"

#include "singleton.h"

#include singleton * singleton::instance = nullptr;

singleton::singleton() {}

singleton::~singleton()

singleton * singleton::getinstance()

void singleton::operation()

客戶端**:

//file: singletonpattern.cpp : this file contains the 'main' function. program execution begins and ends there.

#include "pch.h"

#include "singleton.h"

#include using namespace std;

int main()

singleton單例類:

public class singleton

private static singleton instance = null;

public static singleton instance

}public void operation()

}

其中靜態類方法instance用來獲取_instance屬性,上方**使用了c#的getter訪問運算子功能來實現instance方法,使singleton.instance()的呼叫方式,寫為singleton.instance的方式,減少的一對括號對於後續**維護有著一定程度的幫助。

客戶端測試**:

class program

}

或者使用方法方式獲取單例:

public class singleton

private static singleton instance = null;

public static singleton getinstance()

return instance;

}public void operation()

}//使用時:

//singleton singleton = singleton.getinstance();

public class singleton

private static singleton instance = null;

private static readonly object syncobj = new object();

public static singleton instance

// return instance;

//}//加同步鎖前後兩次判斷,僅當instance為空時,才進行加鎖操作

get

}return instance;}}

public void operation()

}

c#多執行緒單例的另一種寫法,這樣寫雖然很簡潔,但是其instance例項並不是在第一次使用的時候才建立,而是在執行時第一次發現singleton類被用到時就建立了

public class singleton 

private static singleton instance = new singleton();

public static singleton instance

}public void operation()

}

優點:

單例模式通過將類的構造方法私有化,讓類物件只能夠在類的成員方法中產生,配合類的靜態成員屬性在類中只會出現乙個的限制,讓系統可以有效的限制數量,因此,單例模式可以有效的限制類物件產生的地點和時間,同時也可以防止類物件被隨意產生而造成系統錯誤。

缺點:單例模式使用方便,但是在挑選適合以單例模式實現的類時,需要認真挑選,不能夠濫用單例;其次,單例模式違反了「開閉原則」,因為通過instance方法獲取的物件是「實現類」不是「介面類」,該方法返回的物件是包含了實現細節的實體類,當後續設計變更後者需求改變時,程式設計師無法將它替代為其他類,只能改變實現類中原有的程式**,無法滿足「對修改關閉」的要求。

ref

書籍:設計模式與遊戲開發、大話設計模式

github:

10 單例模式

1.單例模式的作用 保證多個程序內,即使多執行緒訪問 該物件的例項只有乙個,而且只會被建立一次。2.單例模式什麼時候用?該物件的建構函式非常耗時,例項化一次該物件,需要非常長的時間,這樣如果每次都去建立,會消耗很多資源。3.單例模式的代價 private static singleton singl...

設計模式 單例模式

單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...

設計模式 單例模式

class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...