0

让我们想象一下一个简单的结构:如何降低一个onClick()方法中圈复杂度

public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.btn_first: { 
      // some code 
     } 
      break; 
     case R.id.btn_second: { 
      // some code 
     } 
      break; 
     case R.id.btn_third: { 
      // some code 
     } 
      break; 
     // and so on 
    } 
} 

这是处理不同的按钮点击代码微不足道的一块。但随着按钮数量的增加 - switch块的圈复杂度随之增加。有没有另外一种方法来表示这种代码结构,以减少onClick()方法的圈复杂度?提前致谢。

+0

不,没有其他的可能性 – Blood

+0

选项1:每个按钮使用一个点击处理程序。选项2:将组按钮转换为点击处理程序,并使用短开关语句的几个点击处理程序。选项3:将点击处理委托给视图(请参阅下面的Ryan Stewart答案)。 – DwB

回答

0

这是可能的(hashmap与执行者或例如),但在我看来,它会使代码质量变差。低圈复杂度对于高质量代码是有利的,但最终目标仍然应该是高质量和可维护的代码,而不是低圈复杂度。

+0

此代码将变成低质量且不可维护。这是这里的问题。 –

2
public void onClick(View view) { 
    for (ClickHandler handler : allHandlers()) { 
     if (handler.supports(view.getId())) { 
      handler.onClick(view); 
     } 
    } 
} 

interface ClickHandler { 
    boolean supports(int viewId); 
    void onClick(View view); 
} 

实现每个分支ClickHandler并有allHandlers()构建它们的列表。