C#,模式 - 许多条件

ada*_*o94 10 c# design-patterns pattern-matching conditional-statements

我正在为我的问题寻找一个好的模式.

我有一些bool变量:

condition1,condition2,condition3.

我也有一些动作,在课堂内的不同地方调用:

动作1,动作2,ACTION3

当条件1和2为真时,调用Action1.当条件2和3为真时,将调用action2.当所有条件都为真时,将调用操作3.

当然,这只是问题的简化.我不想在每个地方使用if else.这非常不清楚.

我一直在考虑状态,但我想这不是解决这个问题的最佳方法.

Sea*_*ean 12

一种选择是将条件逻辑包装在基类中,然后从中派生以执行实际操作.这是Command模式和(我认为)策略模式的变体:

class ActionState
{
  public bool Condition1{get;set;}
  public bool Condition2{get;set;}
  public bool Condition3{get;set;}
}

abstract class ActionDispatcher
{
  protected abstract void ExecuteAction1();
  protected abstract void ExecuteAction2();
  protected abstract void ExecuteAction2();

  public void Action1(ActionState state)
  {
    if(state.Condition1 && state.Condition2)
    {
      ExecuteAction1();
    }
  }

  public void Action2(ActionState state)
  {
    if(state.Condition2 && state.Condition3)
    {
      ExecuteAction2();
    }
  }

  public void Action3(ActionState state)
  {
    if(state.Condition1 && state.Condition2 && state.Condition3)
    {
      ExecuteAction3();
    }
  }

  public void AllActions(ActionState state)
  {
    // Execute all actions depending on the state
    Action1(state);
    Action2(state);
    Action3(state);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @AlexanderDerck如果您只显示示例,那么您还没有阅读它.并且只知道模式的第三人称摘要.模式不是*代码,它们是问题,上下文,解决方案以及与其他模式的关系.当前语言的几个特征如C#*是这些模式的*实现.了解它们将有助于您以新的方式将它们结合起来 (4认同)
  • @AlexanderDerck一些例子在Smalltalk中,一些在C++中.这没关系.这是*真正重要的概念,问题的描述,解决方案等.一旦你理解了你想要的东西,你就可以用你喜欢的语言轻松找到各种模式的实现. (3认同)