2012-07-25 54 views
0

我正在爲有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並遍歷它們,或者我應該讓我的客戶端處理項目集合(現在就是這種情況)。

回答

1

我會處理這個問題的方式是創建一個靜態的NSMutableDictionary,當你的應用程序啓動時,可以使用新的類方法註冊已知的咖啡類型。類方法將在字典上執行setObject:forKey。爲客戶提供一些手段,以便按照自己的意願註冊任意多個對象,並知道每個「關鍵」(名稱)必須是唯一的。也就是說,他甚至可以使用相同的密鑰覆蓋您創建的初始項目(並替換與該類型關聯的任何對象)。

我會使用名稱而不是數字(如現在那樣),但如果你想堅持使用數字,只要你在字典中使用一個NSNumber鍵。

+0

優秀!!我肯定會更喜歡這個。我唯一擔心的是工廠模式是標準的,無處不在我們可以幫助其他人輕鬆識別這個類的目的另一方面,人們通常會發現很難解釋NSMuatableDictionary的使用(Objective C沒有泛型:或者沒有閱讀我正在考慮一個更優雅的解決方案,以便我c在Factory類中包裝這個NSMutableDictionary?那個怎麼樣 ? – 2012-07-25 00:47:49

+0

對不起,您錯過了我的觀點。字典是內部的。您添加新的類方法來添加類型,提供所有類型的數組(這只是字典鍵)等等。用戶看不到字典。它只是延伸到目前爲止你所做的。您剛纔的工廠方法將它們保存在字典中,然後根據需要將其複製出來。 – 2012-07-25 00:51:04

+0

gr8我認爲工廠的方法需要重新定義..我已經多次面對這個問題,但沒有拿出一個優雅的解決方案..謝謝 – 2012-07-25 00:53:51

相關問題