我正在製作一個圖書館,以便將來可以被各種人使用。如何編寫類:只能創建具有特定(唯一)字段的一個對象!
class WrapperMoveable
{
IMoveable moveable;
public WrapperMoveable(IMoveable moveable)
{
this.moveable = moveable;
}
}
的問題:如何編輯WrapperMoveable類,以確保特別IMoveable exacly一個對象可以存在。如果有人試圖用某個接口創建一個包裝器對象,並且當包含該接口的包裝器類已經存在時,mechanizm應該返回現有的包裝器對象。
我有一些解決方案,但請你自己先思考一個問題。
解決方案:
創建包裝類,包含所有創建的包裝對象靜態字段。
class WrapperMoveable { IMoveable moveable; static List<WrapperMoveable> createdWrappers = new List<WrapperMoveable>(); private WrapperMoveable(IMoveable moveable) { this.moveable = moveable; } public static WrapperMoveable CreateWrapper(IMoveable moveable) { if (createdWrappers.Any(e => e.moveable == moveable)) return createdWrappers.First(e => e.moveable == moveable); WrapperMoveable newWrapper = new WrapperMoveable(moveable); createdWrappers.Add(newWrapper); return newWrapper; } }
該方法的問題在於程序員不能通過使用新關鍵字來正常創建對象。所以程序員必須知道只能用靜態方法創建對象。此外,garbridge收集器不會釋放該對象,因爲引用始終存在於createdWrappers中。
創建,創建包裝類,一類WrapperFactory。如前例所示,proggramer必須知道如何創建包裝對象。在這個解決方案中使用工廠類。
- 通過掃描所有對象類型WrapperMoveable的存儲器,並檢查是否該對象包含提供接口。
什麼解決方案,這個問題在你看來是最好的?梅比你有你自己更好的解決方案?
請閱讀帖子正文! – MaciejLisCK
我會看看創建一個靜態的int = 0。用它作爲參考計數。如果計數顯示newwrapper已經被創建,那麼返回就會創建它。希望這是你的後? – Steve