一、設計模式的四個基本要素
1、名稱。
2、要解決的問題(或者說應用場景)。
3、解決方案。
4、應用後的效果。
二、模式:Singleton
名稱:
Singleton,中文有譯作“單粒”或者“單件”,但個人感覺都是怪怪的,按着這個寫法的普通譯法,好像說成“單子”也好,不過總之不大好聽。
要解決的問題:
存在一個類,在整個系統中只允許此類只有一個對象。比如說當建立一個數據庫操作類,用於總管所有的數據庫操作,那麼此時可能不希望這個類擁有多個對象而產生干擾。
解決方式:
1、構造方法私有化。
2、提供靜態共有方法以獲取此類的唯一實例。
以下代碼大概提供一個方案:
class Singleton
{
private:
static Singleton *singleton;//唯一對象聲明
Singleton();
public:
static Singleton* GetSingleton();//獲取唯一對象
}
SIngleton* singleton = new Singleton();//唯一對象的初始化
應用後的效果:
1、很明顯,解決了我們所要解決的問題,在此實現之下,無法構建除了唯一對象以外的新對象。
2、每一個模式基本都會帶來一些副作用,在此實現之下,因爲構造函數的私有化,這個類無法引申更多子類,即使將構造函數申明爲protected,由於存在靜態私有對象,子類仍然無法當成父類來使用。
3、一個類的靜態成員具有明顯的全局性,使用的時候需要更多小心。
4、在工具類中的使用:當設計一個工具類時,如果希望此工具類從其他類繼承一些方法(自然不會是靜態方法),那麼可以通過將此工具類做成一個Singleton, 從而可以通過此工具類的唯一實例來調用工具類中的非靜態方法。
ps. 因爲singleton的簡單性,使得singleton很容易被濫用,然而由於singleton所帶來的副作用(效果2、3),良好的開發中使用singleton的越來越少。請關注設計的真正需求,注意應用場景。