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)站導航:
           
          主站蜘蛛池模板: 社旗县| 库尔勒市| 如东县| 丰台区| 海原县| 泰州市| 漠河县| 芒康县| 宁武县| 洛宁县| 广东省| 蒙阴县| 邵阳县| 太谷县| 丹东市| 临沂市| 瑞昌市| 和平县| 渝北区| 阳东县| 调兵山市| 黄山市| 石门县| 怀宁县| 滦南县| 奇台县| 九龙县| 于都县| 鸡西市| 文山县| 通辽市| 化州市| 鹤岗市| 丰台区| 鹰潭市| 皮山县| 吴桥县| 平度市| 永州市| 达孜县| 集安市|