![](/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.