我正在爲有4種不同口感的咖啡的咖啡店創建一個Menu應用程序。 1.黑咖啡 2.卡布奇諾 3.摩卡 4.冰咖啡。可以讓工廠類負責一次創建一個對象集合而不是一個對象
我已經使用工廠方法來生成這些對象。
+ (Coffee *) getInstance:(COFFE_TYPE /*Enumeration*/):type{ Coffee *returnValue = nil; switch(type){ case Black: returnValue = new Black_Coffee(); break; case Cappuccino: returnValue = new Cap_Coffee(); break; case Mocha: returnValue = new Mocha_Coffee(); break; case Iced: returnValue = new Iced_Coffee(); break; } return returnValue; }
在我的客戶端,我必須維護一份所有可用咖啡的清單。我相信沒有辦法去了解給定基類的子類,所以我必須手動遍歷所有的子類,並使用工廠方法來創建每個對象。一旦我有50種不同類型的咖啡(我會這樣),這將變得混亂。所以每次添加新類型時,我都必須將其添加到工廠,以及我的客戶需要添加哪個附加項目。
有沒有辦法讓我可以在一個地方傳遞整個邏輯。因此,只有工廠方法只會瞭解其他項目,而我的客戶端可以在工廠類本身上調用getAllItems並遍歷它們,或者我應該讓我的客戶端處理項目集合(現在就是這種情況)。
優秀!!我肯定會更喜歡這個。我唯一擔心的是工廠模式是標準的,無處不在我們可以幫助其他人輕鬆識別這個類的目的另一方面,人們通常會發現很難解釋NSMuatableDictionary的使用(Objective C沒有泛型:或者沒有閱讀我正在考慮一個更優雅的解決方案,以便我c在Factory類中包裝這個NSMutableDictionary?那個怎麼樣 ? – 2012-07-25 00:47:49
對不起,您錯過了我的觀點。字典是內部的。您添加新的類方法來添加類型,提供所有類型的數組(這只是字典鍵)等等。用戶看不到字典。它只是延伸到目前爲止你所做的。您剛纔的工廠方法將它們保存在字典中,然後根據需要將其複製出來。 – 2012-07-25 00:51:04
gr8我認爲工廠的方法需要重新定義..我已經多次面對這個問題,但沒有拿出一個優雅的解決方案..謝謝 – 2012-07-25 00:53:51