一种解决方案是互动的结果和对球的创建界面:
public interface IInteractionResult
{
void Handle();
}
public interface IBall
{
BallTypeEnum BallType { get; }
IInteractionResult HandleInteraction(IBall ball);
}
并落实每一个实现IInteractionResult
您可能类别,其中在Handle
方法设置用于交互的逻辑:
public class DestroyInteractionResult : IInteractionResult
{
public void Handle()
{
//your code for destroy result behaviour
}
}
public class BounceInteractionResult : IInteractionResult
{
public void Handle()
{
//your code for bounce result behaviour
}
}
public class NothingInteractionResult : IInteractionResult
{
public void Handle()
{
//your code for nothing
}
}
之后执行Ball
实施IBall
switch
声明执行HandleInteraction
后执行您的类。 SoccerBall
例如:
public class SoccerBall : IBall
{
public BallTypeEnum BallType
{
get { return BallTypeEnum.Soccer; }
}
public IInteractionResult HandleInteraction(IBall ball)
{
switch (ball.BallType)
{
case BallTypeEnum.Soccer:
return new BounceInteractionResult();
case BallTypeEnum.Bowl:
return new DestroyInteractionResult();
case BallTypeEnum.PingPong:
return new BounceInteractionResult();
// and so on
}
throw new NotImplementedException("Undefined ball type");
}
}
独立类每个球类型和用于每一个交互帮助收集单个逻辑针对每种类型的成单一流。
你handleInteraction
会是什么样子:
public void handleInteraction(IBall ball1, IBall ball2)
{
var interaction = ball1.HandleInteraction(ball2);
interaction.Handle();
}
在我看来,这是最灵活的解决方案。某种策略模式。
感谢您的答案,特别是战略模式的建议。 –