这是我在让事情变得更好之前让事情变得更糟。
您可以将所有 AnimalType 决策逻辑封装在一个类中。
在这两种类型(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()
}
}