<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    PC的blog

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

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

    使用Enum替換int常量

    這一步比較簡單,先創建一個enum類:

    package de.jingge.refactoring;

    public enum SystemState {

        LOGGEDIN,

        LOGGEDOUT,

        IDLE;

    }


    然后開始重構SystemManager, 使用SystemState代替SystemManager里的int狀態:

       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;
        }
    }

    然后重構測試類:

    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);
        }
    }


    運行這個測試類->通過

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




    聲明:本文版權歸作者所有,如需轉載請注明出處。

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

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


    網站導航:
     
    主站蜘蛛池模板: 又大又粗又爽a级毛片免费看| 久久久久久久免费视频| 天堂亚洲免费视频| 亚洲av日韩aⅴ无码色老头| 成人免费一区二区三区在线观看| 亚洲一区免费在线观看| 免费三级毛片电影片| 久久精品国产亚洲αv忘忧草| 四虎永久在线精品免费观看视频| 亚洲人6666成人观看| 免费一本色道久久一区| 亚洲AV无码一区二区乱子仑| 亚洲国产成人精品91久久久 | 亚洲欧洲无码AV不卡在线| 在线观看av永久免费| 亚洲精品无码久久久久YW| 国产aa免费视频| a级毛片免费网站| 亚洲AV日韩AV高潮无码专区| 亚洲免费一级视频| 日韩国产欧美亚洲v片| 亚洲区不卡顿区在线观看| 一区二区免费视频| 国产日本亚洲一区二区三区| 国产免费一区二区三区VR| 黄床大片免费30分钟国产精品| 水蜜桃亚洲一二三四在线| 思思re热免费精品视频66| 黄色网址在线免费观看| 亚洲Av无码专区国产乱码DVD| 免费福利网站在线观看| 特级aaaaaaaaa毛片免费视频| 亚洲成Av人片乱码色午夜| 在线观看特色大片免费视频| 尤物视频在线免费观看| 亚洲精品在线网站| 国产乱弄免费视频| 91香焦国产线观看看免费| 久久亚洲精品11p| 亚洲AV乱码一区二区三区林ゆな | 亚洲av午夜成人片精品电影 |