簡體   English   中英

如何讓一個 function 創建多個不同類型的相同 class

[英]How to have one function create multiple different types of the same class

我想制作一副 16 張牌,每副牌都有一些牌。

這是我目前的解決方案,但看起來不太好。

如何讓它更干凈,並使其遵循 OOP 原則。

每個部分(守衛、牧師等)都繼承自卡 Class。

我應該在這里查看通用類型嗎?

帶格式的代碼圖像

 class Deck
{
    public List<Card> Cards;
    int NumberofGuards = 5;
    int NumberofPriests = 2;
    int NumberofBarons = 2;
    int NumberofMaids = 2;
    int Numberofprinces = 2;
    int NumberofKings = 1;
    int NumberofCountesses = 1;
    int NumberofPrincesses = 1;
    public Deck()
    {
        //Guards
        for (int i = 0; i < NumberofGuards; i++)
        {
            Cards.Add(new Guard());
        }
        //Priests
        for (int i = 0; i < NumberofPriests; i++)
        {
            Cards.Add(new Priest());
        }
        //Barons
        for (int i = 0; i < NumberofBarons; i++)
        {
            Cards.Add(new Baron());
        }
        //maids
        for (int i = 0; i < NumberofMaids; i++)
        {
            Cards.Add(new Maid());
        }
        }
    }

}

abstract class Card
{
    public string Name { get; set; }
    public int Number { get; set; }
    public abstract void Keep();
    public abstract void Discard();
    public abstract void Use();
}

這將是工廠模式實現的一個很好的用途。

public class CardFactory<T> where T : Card, new()
{
    public static List<T> BuildMany(int count) {
        var list = new List<T>();
        for (int x=0; x<count; x++)
        {
            list.Add(new T());
        }
        return list;
    }
}

然后,修改您的Deck class 以使用它:

公共 class 甲板

{
    public readonly List<Card> Cards;
        
    public Deck(int numberOfGuards) // [numberOfPriests, etc]
    {
        // Guards
        Cards.AddRange(CardFactory<Guard>.BuildMany(numberOfGuards));

        // [...]
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM