2014-02-12 22 views

回答

3

我想你需要的Deck類中實現這一習俗的限制,而不是暴露List<Card>作爲公衆成員:

public class Deck 
{ 
    private List<Card> cards; 

    public Deck() 
    { 
     cards = new List<Card>(); 
    } 

    public void Add(Card card) 
    { 
     if (cards.Count == 52) 
     { 
      throw new TooManyCardsException(); 
     } 
     cards.Add(card); 
    } 

    public void Remove(); 
    { 
     ... 
    } 

    .... 
} 
+0

假設有一個理由使用列表在這裏你可能很好地服務添加和刪​​除返回布爾值來表示操作成功。你可以避免拋出一個在運行時代價高昂的異常。我曾經寫過一個依賴拋出異常的遞歸算法......不用說我不明白性能損失......它超級慢。 – mckeejm

+3

好點;這一切都取決於設計。其中一個哲學是你拋出一個異常,然後處理它,比如UI層,並且說「糟糕,不能添加另一張卡片!」;另一種方法是按照你的說法返回一個布爾值。那麼線下的其他層必須知道如何處理成功/返回值。異常方法在這裏可能會過度,同意;在大型多層/多級系統中,例如可以從另一個DLL拋出異常,並且需要在更靠近用戶可能位置的更高層或者初級程序員處理時,它更合適。 –

+0

是的優點。正如你所說的,這關乎誰來處理它,誰需要知道它是如何處理的。 – mckeejm

2

如果你知道該套牌總是有52張牌,那麼爲什麼不製作一個固定大小的陣列呢?最終如果甲板可以由合作者修改,那麼你可能想要做其他答案中提到的內容,並在你的課堂上提供一些保護Deck對象的安全措施。如果Deck型號的卡陣列/列表只讀給外部,那麼我支持陣列的想法。

+1

感謝您的回答。像這樣?公用卡[]卡=新卡[52]; – Salty

+1

這就是爲什麼我upvoted你的答案。陣列想法完成這項工作。我的版本更重,我假定OP有理由使用List 。 –

+1

是埃裏克,就是這樣。 – mckeejm

相關問題