C#中的StackOverFlow-在列表内部创建列表

最近,我对一个Job应用程序进行了在线测试,结果非常糟糕。

我的挑战是用C#创建一个石头剪刀布游戏(以后可以添加蜥蜴和Spock)。

我决定创建一个抽象类Choice,所有可能的选择都通过多态来获得其行为。

这个选择类的选择列表为空,其中包括所有获胜的可能性。像这样:

public class Scissor : Choice
{
    public Scissor()
    {
        Init();
    }

    public override void Init()
    {
        Winners = new List< Choice >();
        Winners.Add(new Paper());
        Winners.Add(new Lizard());
    }        
}

问题是我正在重新创建Choices的另一个实例(例如Paper和Lizard),然后再拥有自己的获奖者列表,并且这在我的程序中创建了Stackoverflow。

我的解决方案是:创建Scissors类,由我自己运行Init()方法(从构造方法中删除)。我不喜欢这种方法,因为在“设计模式”概述中看起来很糟糕。 (我可以为其他开发人员创建另一个类并忘记调用Init方法的映像。

采访者告诉我,我应该使用Singleton,但我看不出有什么帮助。

有人可以帮我解释一下这有什么帮助吗?