單例模式(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 ...