私がスポーツゲームを作成しているとしましょう。このゲームには、プレーヤーがプレイ、攻撃、防御などできるさまざまな位置があります。そこで、基本クラスを作成することから始めます。
public abstract class Position
{
public abstract string Name
{
get;
}
}
とサブクラス...
public class Defender : Position
{
public override string Name
{
get { return "Defender"; }
}
}
等々。これはすべて問題ありません。
しかし今、私はこれらのオブジェクトを作成するための関数が必要です。位置による作成機能が必要です。したがって、考えられる解決策の1つは、すべての位置の列挙型を作成し、この値を、列挙型をオンにして適切なオブジェクトを返す関数に渡すことです。しかし、これは私のコードの臭いアラームをトリガーします。この魂は、関数内のクラス、列挙型、およびスイッチを結び付けます。
public static Position GetByType(Types position)
{
switch(position)
{
case Types.Defender:
return new Defender();
... and further terrible code
どのような解決策を見るべきですか?これはどのデザインパターンですか?