2012-08-25 18 views
0

想象一下,您有300種不同類型的單元。每個單位都有不同的特殊能力。例如,如果unit18靠近樹,它就不可見。 Unit33和unit212具有相同的能力。我怎樣才能巧妙地模擬這300個獨特的單位?以objc模式建模許多不同類

我只有兩個想法,這兩個都很糟糕。要麼爲每個單位創建一個班級,最後需要300個班級。而每一次我有時間去檢查有沒有會出現這樣的結構:

for (Unit *unit in units) 
{ 
    if ([unit isKindOfClass:[Unit1 class]]) 
    { 
     // do something 
    } 
    else if ([unit isKindOfClass:[Unit2 class]]) 
    { 
     // do something 
    } 
    else if ([unit isKindOfClass:[Unitxxx class]]) 
    { 
     // do something 
    } 
} 

另一種解決方案是創建具有各種能力一個整體的怪物單元類。

我認爲設計的像這篇文章解釋說: http://www.learn-cocos2d.com/2010/06/prefer-composition-inheritance/

我已經試圖讓這種設計的,但它沒有工作。 enter image description here

我很感謝每一個建議。

在此先感謝!

+0

您應該將所有對象加載到一個數組中,這有助於生成更加動態和高效的代碼。 –

+0

所以你建議創建300個不同的類。每個單位一個? – zeiteisen

+0

我認爲這種問題更適合gamedev.SE – JustSid

回答

1

嘗試使用Protocols。 Unit18,Unit33和Unit212都符合TreeInvisibility協議。

要檢查是否符合協議,請撥打[unit conformsToProtocol:@protocol(TreeInvisibility)]

這裏的好處是類可以繼承多個協議。這允許您混合和匹配協議的組合。


現在我想到了更多,除了所有協議之外,您還是必須使用此方法編寫300個類。這只是使控制單元更容易,因爲您只需要檢查不同的協議而不是單個類。

它可能不是您的最佳解決方案,但希望它能幫助您指向一個好的方向。

相關問題