2011-04-28 58 views
0

我有一個singleton記錄器,許多線程在運行時用於記錄目的。我需要不同的類型,因此我決定將可變部分移動到protected方法並從中繼承。從一個單例類考慮繼承

繼承中有什麼特別的singleton類(我們沒有任何常規類的考慮)?

+1

不會繼承的類使用父的構造函數因此返回父類的新() – 2011-04-28 11:50:45

+3

我的問題是 - 爲什麼你試圖從單身人士繼承? – 2011-04-28 11:55:09

+0

@William:例如,如果孩子想要更改日誌文件格式。這個記錄器將一些數據添加到每個日誌中,比如記錄已完成的地方(彙編,命名空間,類,方法)。我把它設置爲singleton,因此可以使用一行代碼進行日誌記錄:'Logger.Log.info(「Hello World!」)' – Xaqron 2011-04-28 11:59:54

回答

1

單身人士應該封存期限。否則,他們在實踐中可能不是真正的單身人士。

當然,您可以使用IOC容器如StructureMap,Autofac或Castle Windsor來管理您班級的生活方式;那麼你不必把它寫成單例,只需在IOC容器中聲明它爲一個單例。

這就是說,看着你的特殊例子(你想記錄),你可能並不真的需要一個單例類。如果有一個非常好的理由 - 比如創建對象時的開銷太大,你只能使用單例。但打開一個文本文件的寫作不會算作重要的開銷...

+0

好的開銷,但併發訪問文件爲我辯護單身。 – Emmanuel 2011-04-28 13:26:49

+0

對於文件的併發寫入訪問,您需要實現排隊或創建帶鎖定的關鍵部分。不能對文件併發寫入訪問。 – 2011-04-28 14:01:05