本文參考自《代碼整潔之道》,這本書,非常好!
向方法中傳入boolean值參數,用於判斷邏輯並分開執行。缺點:
- 方法簽名立即變得複雜起來。
- 此方法做的事情多餘一件。
執行個體:
/** * @param isChecked */ protected void setAllDayViewsVisibility(boolean isChecked) { if (isChecked) { if (mEndTime.hour == 0 && mEndTime.minute == 0) { mEndTime.monthDay--; long endMillis = mEndTime.normalize(true); // Do not allow an event to have an end time // before the // start time. if (mEndTime.before(mStartTime)) { mEndTime.set(mStartTime); endMillis = mEndTime.normalize(true); } setDate(mEndDateButton, endMillis); setTime(mEndTimeButton, endMillis); } mStartTimeButton.setVisibility(View.GONE); mEndTimeButton.setVisibility(View.GONE); mTimezoneRow.setVisibility(View.GONE); } else { if (mEndTime.hour == 0 && mEndTime.minute == 0) { mEndTime.monthDay++; long endMillis = mEndTime.normalize(true); setDate(mEndDateButton, endMillis); setTime(mEndTimeButton, endMillis); } mStartTimeButton.setVisibility(View.VISIBLE); mEndTimeButton.setVisibility(View.VISIBLE); mTimezoneRow.setVisibility(View.VISIBLE); } updateHomeTime(); }
重構以後,變成2個方法
protected void setAllDayViewsGone() {if (mEndTime.hour == 0 && mEndTime.minute == 0) {mEndTime.monthDay--;long endMillis = mEndTime.normalize(true);// Do not allow an event to have an end time// before the// start time.if (mEndTime.before(mStartTime)) {mEndTime.set(mStartTime);endMillis = mEndTime.normalize(true);}setDate(mEndDateButton, endMillis);setTime(mEndTimeButton, endMillis);}mStartTimeButton.setVisibility(View.GONE);mEndTimeButton.setVisibility(View.GONE);mTimezoneRow.setVisibility(View.GONE);updateHomeTime();}protected void setAllDayViewsVisible() {if (mEndTime.hour == 0 && mEndTime.minute == 0) {mEndTime.monthDay++;long endMillis = mEndTime.normalize(true);setDate(mEndDateButton, endMillis);setTime(mEndTimeButton, endMillis);}mStartTimeButton.setVisibility(View.VISIBLE);mEndTimeButton.setVisibility(View.VISIBLE);mTimezoneRow.setVisibility(View.VISIBLE);updateHomeTime();}