У меня есть класс с абстрактным фабричным методом следующим образом:
public abstract class OpClass
{
public abstract IHou OperationInvoke(string opClass);
}
public class FactoryClass : OpClass
{
public override IHou OperationInvoke(string opClass)
{
if(opClass == "T")
{
//new Treasure();
}
}
}
и конкретный класс "Сокровища" выглядит так:
public interface IHou
{
void Operation(Player p, List<Player> lstPlayers);
}
public sealed class Treasure : IHou
{
private static Treasure instance = null;
private static readonly object padlock = new object();
Treasure()
{
}
public static Treasure Instance
{
get
{
lock (padlock)
{
if (instance == null)
{
instance = new Treasure();
}
return instance;
}
}
}
public void Operation(Player p, List<Player> lstPlayers)
{
p.Points = p.Points + 200;
}
}
В моем основном методе я пытаюсьназывать его так:
Main()
{
Player p = //Populate from db;
List<Player> players = //populate from db
OpClass c = new FactoryClass();
IHou output = c.OperationInvoke("T");
output.Operation(p, players);
}
Но мне нужен единственный экземпляр класса "Сокровище" , поэтому у меня появилась идея изменить обычный "Сокровище" класс для одноэлементного класса.
Итак, как в этом сценарии как создать отдельный экземпляр класса Treasure, а также сохранить шаблон лиц?И если не представляется возможным реализовать лучшее решение, если добавляется количество конкретных классов, таких как Сокровище, Дом, Блоки и т. Д .?
Редактировать : Не подходит ли использование фабричного шаблоназдесь, как я понимаю, если у нас будет много классов с общим поведением, как в этом Сокровище, и скажем, что добавляется еще один класс " Дом ", который вычисляет точки другим способом, я позволю фабрике решатьчтобы вызвать какой экземпляр.