我想了解一些我們需要使用實例變量的延遲初始化的實際場景。對於所有線程都具有相同文件處理程序的場景,我使用了Singleton模式作爲靜態變量,但在實際使用場景時並不確定。在實例變量上實際使用延遲初始化
問候, Ramakant
我想了解一些我們需要使用實例變量的延遲初始化的實際場景。對於所有線程都具有相同文件處理程序的場景,我使用了Singleton模式作爲靜態變量,但在實際使用場景時並不確定。在實例變量上實際使用延遲初始化
問候, Ramakant
例如,你有哪些有關聯的圖像的實體User
,所以當你閱讀的用戶,你並不總是需要的圖像,所以嘗試加載圖像懶洋洋當實際需要它
無論單身是非常耗費資源(內存,處理能力,帶寬,網絡端口等),您只希望根據需要創建它,因爲在從不需要單例的情況下,初始化急切地浪費資源。
另一個原因:如果資源初始化單例只在實際需要單例時存在,它可以使你的系統更健壯。例如。假設單例是一個打印後臺處理程序。如果系統中當前沒有打印機,則不值得分配試圖連接到不存在的打印機的假脫機程序。由於用戶在系統中沒有打印機時不應請求打印,因此懶惰後臺打印程序提供了完全正確的行爲,沒有明確的邏輯。用戶永遠不會請求pringing,因此後臺打印程序不會初始化,並且永遠不會嘗試失敗的連接。
其他惰性初始化有意義的資源密集型單例的例子:記錄器,獨特的SOA服務,唯一的一般網絡服務,緩存管理器,負載均衡器,僞隨機數字流生成器,資源管理器。
也許模板庫的模板抽象。模板被初始化爲String
,但只有在模板被實際請求/運行時才被編譯爲快速內部表示。
不要認爲它是「懶惰初始化」,可以認爲它是「緩存」。 – 2013-04-24 17:28:34
任何時候你編寫一個庫,例如,你甚至不知道是否所有的函數都會被調用。 – radai 2013-04-24 17:29:14
所有的類和方法都是在初始化的情況下加載的,在這種情況下,你一直在使用它,而不知道它。 – 2013-04-24 19:06:40