一種解決方案是互動的結果和對球的創建界面:
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();
}
在我看來,這是最靈活的解決方案。某種策略模式。
感謝您的答案,特別是戰略模式的建議。 –