單例模式(反射+封裝注冊表) 2009年11月08日 星期日 下午 9:09 使用反射 在例9的帶注冊表的單例類中,使用反射來實例化一個特殊的類的對象。與例8相對的是通過這種實現(xiàn),Singleton.getInstance()方法不需要在每個被實現(xiàn)的子類中重寫了。 例9 使用反射實例化單例類
關于單例類的注冊表應該說明的是:它們應該被封裝在它們自己的類中以便最大限度的進行復用。 封裝注冊表 例10列出了一個單例注冊表類。 例10 一個SingletonRegistry類
注意我是把SingletonRegistry類作為一個單例模式實現(xiàn)的。我也通用化了這個注冊表以便它能存儲和取回任何類型的對象。例11顯示了的Singleton類使用了這個注冊表。 例11 使用了一個封裝的注冊表的Singleton類
上面的Singleton類使用那個注冊表的唯一實例通過類名取得單例對象。 現(xiàn)在我們已經(jīng)知道如何實現(xiàn)線程安全的單例類和如何使用一個注冊表去在運行期指定單例類名,接著讓我們考查一下如何安排類載入器和處理序列化。 Classloaders 在許多情況下,使用多個類載入器是很普通的--包括servlet容器--所以不管你在實現(xiàn)你的單例類時是多么小心你都最終可以得到多個單例類的實例。如果你想要確保你的單例類只被同一個的類載入器裝入,那你就必須自己指定這個類載入器;例如:
|
|