![](/img/trans.png)
[英]How to de-serialize JSON array containing objects of different class types that have same parent 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.