單例模式中唯一實例為什么要用靜態?想要回答這個問題,你需要明白單例模式是如何實現的。從本質上理解清楚實現原因,前面的問題也就解決了。
單例模式實現過程如下:
首先,將該類的構造函數私有化(目的是禁止其他程序創建該類的對象);
其次,在本類中自定義一個對象(既然禁止其他程序創建該類的對象,就要自己創建一個供程序使用,否則類就沒法用,更不是單例);
最后,提供一個可訪問類自定義對象的類成員方法(對外提供該對象的訪問方式)。
說直白一點,你不能用該類在其他地方創建對象,而是通過該類自身提供的方法訪問類中的那個自定義對象。
那么問題的關鍵來了,程序調用類中方法只有兩種方式,①創建類的一個對象,用該對象去調用類中方法;②使用類名直接調用類中方法,格式“類名::方法名()”;
上面說了,構造函數私有化后第一種情況就不能用,只能使用第二種方法。
而使用類型直接點用類中的方法,類種方法必須是靜態的,而靜態方法不能訪問非靜態成員變量,因此類自定義的實例變量也必須是靜態的。這就是單例模式唯一實例必須設置為靜態的原因。