ここでは、物事を良くする前に、物事を悪化させています。
すべての AnimalType 決定ロジックを 1 つのクラスにカプセル化できます。
2 つのタイプ (PigsFeet と HorseFeet) の間には、いくつかの類似したメソッドがあります... WashFeet には共通のシグネチャ (パラメーターのない void) があるため、System.Action を使用してそのメソッドを参照できます。共通のシグネチャ (およびパラメーター) を持つ他のメソッドでは、System.Func(T) が必要になる場合があります。共通の署名のない他のメソッドは、強制的に共通の署名にする必要がある場合があります。
クライアントコードは次のとおりです。
AnimalFeetFacade myFacade = new AnimalFeetFacade(_animalType);
myFacade.WashFeet();
これがカプセル化クラスです。
public class AnimalFeetFacade
{
public AnimalFeetFacade(AnimalType theType)
{
if (theType == AnimalType.Pig)
{
_washFeet = WashPigFeet;
//TODO reference more PigFeet methods here
}
else if (theType == AnimalType.Horse)
{
_washFeet = WashHorseFeet;
//TODO reference more HorseFeet methods here
}
else
{
throw new NotImplementedException("AnimalFeetFacade only works with PigFeet and HorseFeet");
}
}
protected Action _washFeet;
public void WashFeet()
{
_washFeet.Invoke();
}
protected void WashPigFeet()
{
PigFeet.Feet = new PigFeet.Feet()
feet.WashFeet()
}
protected void WashHorseFeet()
{
HorseFeet.Feet = new HorseFeet.Feet()
feet.WashFeet()
}
}