有很多推回到了單身的使用,因爲他們經常被濫用。懶惰的編碼器(1)在單例中沒有提供足夠的功能,導致邏輯在其他對象(如意大利麪條)中散佈,或者(2)他們投入了很多功能,使得單例變成了整個程序。懶惰的編碼器經常使用單例,而不是進行數據驗證,對象測試和對象跟蹤。人們厭倦了試圖解開和保持懶惰的單身人士使用,所以他們試圖壓制單身人士的使用。
我完全理解衝動,而我自己在儀式上警告反對單身人士的虐待。
但是,數據模型是單身人士少數合法用途之一。對於那些在手機上運行的小應用程序尤其如此。最後,您將爲數據模型使用單例,或者將其附加到單例。
例如,假設您決定將您的非單例數據模型對象放在應用程序委託中。那麼,你已經這樣做了:dataModel - > appDelegate - > application(singleton)。要訪問它,你會叫:
[[[UIApplication sharedApplication (a singleton)] delegate] theDataModelObj];
即使你通過它周圍像從對象令牌對象,你仍然必須有數據模型OBJ開始作爲一個單獨的屬性。
當一個對象真的必須滿足「漢蘭達」模式(「只能有一個!」)時,單身是最好的選擇。除了應用程序對象之外,您還將用戶默認設置爲單例以及文件管理器。顯然,在所有這三種情況下,您都希望整個應用程序只有一個實例存在。例如,如果您有多個用戶默認對象,那麼您的應用程序將成爲試圖追蹤所有首選項設置的列車殘骸。如果您有多個文件管理器,則文件操作可能會互相踩在一起。
正確設計的用戶數據模型僅僅是一個更大的用戶默認值的版本。它應該是直接操縱用戶數據的唯一對象。應用程序中沒有其他對象應該至少具有該任務。這使得單例設計模式成爲這種特殊情況下最好的模式。
單身是一個非常強大的工具,但就如同一個物理的工具,他們給你更多的權力,他們創造了更多的機會讓你砍你的頭掉,如果你不小心使用它們。出於這個原因,單身人士應該很少成爲你的首選。通常使用更好的設計模式。
但是,當你真的需要一個單身,你不應該使用它們只是因爲其他人的懶惰給了他們一個壞名聲避而遠之。
知道什麼時候,當不使用一個強大的和危險的工具是直覺,你有經驗的開發程序員的一部分。你不能通過公式。這是使得良好的編碼成爲藝術和程序員成爲工匠的因素之一。
我想我找到了答案EDIT_001:「單身的目標C通常意,直到內存是由OS進程終止時回收從實例化生活」,因此將迎來答案接受。再次感謝。 – fuzzygoat 2010-03-08 15:56:44