<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中加入多態方法吧。  回復  更多評論
      


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


    網站導航:
     
    主站蜘蛛池模板: 大地资源免费更新在线播放| 天天影视色香欲综合免费| 国产精品四虎在线观看免费| 国内精品久久久久影院亚洲| 好先生在线观看免费播放| 33333在线亚洲| 免费av欧美国产在钱| 亚洲综合色丁香婷婷六月图片| 美女视频黄的全免费视频网站| 亚洲另类精品xxxx人妖| 一个人看www在线高清免费看| 亚洲熟妇无码八V在线播放| 日韩视频在线免费观看| 黄页网址在线免费观看 | 亚洲无码黄色网址| 美女网站在线观看视频免费的| 亚洲精品国偷自产在线| **aaaaa毛片免费同男同女| 亚洲中文字幕久久无码| 四虎免费影院4hu永久免费| 国产特黄一级一片免费| 亚洲伦另类中文字幕| 在线看片无码永久免费视频| 美女啪啪网站又黄又免费| 亚洲色无码一区二区三区| 最好看最新的中文字幕免费| 亚洲日本国产综合高清| 亚洲人成国产精品无码| 91精品免费观看| 国产精品亚洲精品久久精品 | 久久久久久久亚洲Av无码| 午夜福利不卡片在线播放免费| 真人无码作爱免费视频| 亚洲精品人成在线观看| 色妞WWW精品免费视频| 久久成人18免费网站| 亚洲精品二三区伊人久久| 亚洲中文字幕丝袜制服一区| 18未年禁止免费观看| 理论片在线观看免费| 久久久亚洲欧洲日产国码是AV|