<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代碼(3)

    OK, 到目前為止,所有的邏輯代碼已經從SystemManager重構到了SystemStatePerformer。下一步應該繼續重構SystemManager, 將SystemState替換為performer:

    1, 使用IDE的重構功能,將變量SystemState改為SystemStatePerformer

    2. 在updateState()方法中調用SystemStatePerformerFactory

    3. 在測試代碼里面,調用manager.statePerformer.getState()

    重構后的代碼如下:

    package de.jingge.refactoring;

     

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


    public class SystemManager {

     

        SystemStatePerformer statePerformer;

     

        
    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) {

            
    this.statePerformer = SystemStatePerformerFactory.getInstance()

                    getSystemStatePerformer(state);

            statePerformer.perform();

        }

    }

    可以看到if else已經消失了。


    測試代碼也要做相應修改:
    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.statePerformer.getState(), LOGGEDIN);

        }

        @Test
        
    public void logout() {

            manager.logout();

            assertEquals(manager.statePerformer.getState(), LOGGEDOUT);

        }

        @Test
        
    public void idle() {

            manager.idle();

            assertEquals(manager.statePerformer.getState(), IDLE);

        }

    }

    到這里重構已經差不多完成了,代碼已經更加面向對象了。這里還有一個小問題,在factory里面還有一個switch,這個和if else其實是沒有本質區別的,也就是說if else并沒有被完全移除掉。


    那么如何能夠徹底把這個switch也移除掉呢?很簡單,我們只需要在getSystemStatePerformer()方法被調用之前先創建所有 performer匿名類的實例,然后在該方法被調用時直接返回對應的實力。 那么具體如何實現呢,請看下一篇文章使用重構移除丑陋的if else代碼(5)




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

    posted on 2008-08-04 03:08 polygoncell 閱讀(1935) 評論(1)  編輯  收藏

    Feedback

    # re: 使用重構移除丑陋的if else代碼(4)[未登錄] 2008-08-04 10:18 Matthew
    在enum中加入多態方法吧。  回復  更多評論
      


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


    網站導航:
     
    主站蜘蛛池模板: 久久大香伊焦在人线免费| 99久久精品免费精品国产| 深夜免费在线视频| 久久久免费观成人影院| 最好看最新的中文字幕免费| 日韩a级毛片免费视频| 亚洲国产精品va在线播放| 亚洲欧洲无码AV不卡在线| 性色午夜视频免费男人的天堂| 四虎影视永久免费观看| 亚洲日本在线免费观看| 中文字幕免费在线看电影大全| 最新仑乱免费视频| 久久久久亚洲AV无码麻豆| 久久最新免费视频| 亚洲AV中文无码乱人伦下载| 一区二区三区视频免费| 亚洲综合国产一区二区三区| 亚洲AV日韩综合一区| 超pen个人视频国产免费观看| 在线免费观看亚洲| 人妻在线日韩免费视频| 亚洲免费一区二区| 国产精品亚洲综合网站| 成熟女人特级毛片www免费| 老司机午夜免费视频| 日本久久久免费高清| 一级一看免费完整版毛片| 免费a级毛片网站| 亚洲第一综合天堂另类专| 好吊妞788免费视频播放| 在线综合亚洲欧洲综合网站| 无码国产精品一区二区免费式影视 | 永久免费看bbb| 精品国产呦系列在线观看免费| 亚洲国产精品久久66| 一级毛片免费观看| 亚洲av无码专区首页| 亚洲AV无码一区二区乱孑伦AS| 成年在线网站免费观看无广告| 中文字幕无码毛片免费看|