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()構建它們的列表。