2008-09-30 55 views
5

這裏的鏈接列出了一些C#中的單例模式([http://www.yoda.arachsys.com/csharp/singleton.html][1])。這篇文章還描述了一個明顯的例子,即單身並不意味着接受「作爲另一個實例的第二個請求但具有不同參數的問題可能成爲問題」的參數。這意味着你需要讓這個類工作的任何參數都應該作爲一個屬性來引入。參數化單例模式

我很想知道是否有任何參數化的單體設計模式。將值作爲屬性接受不會對消費者執行任何操作。

回答

3

根據你的問題,看起來你可能正在看一個抽象工廠模式(創建一個類的幾個家族的實例),它保存已經實例化的類的內部列表/字典,從而模仿單例模式功能。

然後,您將使用此工廠類根據您傳入的參數請求一個對象,並且如果它存在於其內部列表中,則返回它,否則將創建一個新實例,然後將其添加到列表並返回。

1

他的意思是你需要的任何參數 得到該類的工作應該是 作爲屬性誘導。

理想情況下,singleton類不應該依賴外部代碼。

如果您需要爲單例構造函數提供額外信息,則可以創建一個對象池。

它可以是一個簡單的列表或任何其他合適的數據結構。您需要使其成爲線程安全的(如果它很重要),並確保不會有多個使用相同參數實例化的對象。

基本上你會有一個類工廠。它將爲相同的參數返回相同的對象。

在這種情況下,您將擁有N個單例對象 - 即具有不同狀態的對象將被視爲完全不同的實例。

你可以在Inversion of Controls容器中找到這樣的單例的例子。

例如,您可以有一些服務取決於其他服務。當你調用container.Get(服務類型)。 DI容器將自動初始化具有所需參數的服務實例並將其返回給調用者。但是這個服務實例變成了單例 - 你將無法用相同的參數創建另一個服務。