PC的blog

          Finding... Thinking... Solving...

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            9 Posts :: 0 Stories :: 54 Comments :: 0 Trackbacks
          本文緊接使用重構(gòu)移除丑陋的if else代碼(1)

          使用Enum替換int常量

          這一步比較簡單,先創(chuàng)建一個enum類:

          package de.jingge.refactoring;

          public enum SystemState {

              LOGGEDIN,

              LOGGEDOUT,

              IDLE;

          }


          然后開始重構(gòu)SystemManager, 使用SystemState代替SystemManager里的int狀態(tài):

             1. 添加 import static de.jingge.refactoring.SystemState.*;
             2. 刪除所有的integer常量  
             3. 將變量state的類型改為SystemState.

          代碼如下:



          package de.jingge.refactoring;

          import static de.jingge.refactoring.SystemState.*;

          public class SystemManager {

              SystemState state;

              
          public void login() {
                  
          // call service#login()
                  updateState(LOGGEDIN);
              }
             
              
          public void logout() {
                  
          // call service#logout()
                  updateState(LOGGEDOUT);
              }
             
              
          public void idle() {
                  
          // call some other services
                  updateState(IDLE);
              }
             
              
          public void updateState(SystemState state) {
                  
          if (state == LOGGEDIN) {
                      
          // do something after logging in is successful,
                      
          // for example: show welcome dialog, open the last edit document, etc.
                  } else if (state == LOGGEDOUT) {
                      
          // do something after logging out is successful,
                      
          // for example: free used resource, dispose GUI components, etc.
                  } else if (state == IDLE) {
                      
          // do something after the user is idle,
                      
          // for example: save the application state temporarily, lock the application, etc.
                  } else {
                      
          throw new IllegalArgumentException("unknown state");
                  }
                  
          this.state = state;
              }
          }

          然后重構(gòu)測試類:

          1.    添加import static de.jingge.refactoring.SystemState.*;
          2.    刪除所有常量前引用的SystemManager.

          package de.jingge.refactoring;

          import org.junit.AfterClass;
          import org.junit.BeforeClass;
          import org.junit.Test;
          import static org.junit.Assert.*;
          import static de.jingge.refactoring.SystemState.*;


          public class SystemManagerTest {

              
          private static SystemManager manager;

              @BeforeClass
              
          public static void setUpClass() throws Exception {
                  manager 
          = new SystemManager();
                  
          // add some service mock objects
              }
             
              @AfterClass
              
          public static void tearDownClass() throws Exception {
              }
             
              @Test
              
          public void login() {
                  manager.login();
                  assertEquals(manager.state, LOGGEDIN);
              }
            
              @Test
              
          public void logout() {
                  manager.logout();
                  assertEquals(manager.state, LOGGEDOUT);
              }

              @Test
              
          public void idle() {
                  manager.idle();
                  assertEquals(manager.state, IDLE);
              }
          }


          運行這個測試類->通過

          下一篇文章使用重構(gòu)移除丑陋的if else代碼(3)開始處理if else hell




          聲明:本文版權(quán)歸作者所有,如需轉(zhuǎn)載請注明出處。

          posted on 2008-08-04 02:45 polygoncell 閱讀(2094) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 淮滨县| 浦江县| 阿拉尔市| 顺平县| 眉山市| 涞源县| 常熟市| 宁波市| 新丰县| 瓦房店市| 黑山县| 丰都县| 曲水县| 辽中县| 枝江市| 广宁县| 江安县| 上林县| 西平县| 沙洋县| 永兴县| 庐江县| 湖南省| 赣榆县| 襄垣县| 静乐县| 中西区| 翁源县| 双城市| 屯留县| 杂多县| 台山市| 潞城市| 丁青县| 登封市| 盐源县| 千阳县| 大丰市| 鹤峰县| 邵东县| 科技|