單例模式中唯一實例為什么要用靜態(tài)荧飞?想要回答這個問題凡人,你需要明白單例模式是如何實現(xiàn)的。從本質(zhì)上理解清楚實現(xiàn)原因叹阔,前面的問題也就解決了挠轴。
單例模式實現(xiàn)過程如下:
首先,將該類的構(gòu)造函數(shù)私有化(目的是禁止其他程序創(chuàng)建該類的對象)耳幢;
其次岸晦,在本類中自定義一個對象(既然禁止其他程序創(chuàng)建該類的對象,就要自己創(chuàng)建一個供程序使用睛藻,否則類就沒法用启上,更不是單例);
最后店印,提供一個可訪問類自定義對象的類成員方法(對外提供該對象的訪問方式)冈在。
說直白一點,你不能用該類在其他地方創(chuàng)建對象按摘,而是通過該類自身提供的方法訪問類中的那個自定義對象包券。
那么問題的關(guān)鍵來了,程序調(diào)用類中方法只有兩種方式炫贤,①創(chuàng)建類的一個對象兴使,用該對象去調(diào)用類中方法;②使用類名直接調(diào)用類中方法照激,格式“類名::方法名()”发魄;
上面說了,構(gòu)造函數(shù)私有化后第一種情況就不能用俩垃,只能使用第二種方法励幼。
而使用類型直接點用類中的方法,類種方法必須是靜態(tài)的口柳,而靜態(tài)方法不能訪問非靜態(tài)成員變量苹粟,因此類自定義的實例變量也必須是靜態(tài)的。這就是單例模式唯一實例必須設(shè)置為靜態(tài)的原因跃闹。