JavaExplore

          一切像霧像雨又像風
          posts - 19, comments - 45, trackbacks - 0, articles - 0

          代碼中經常會出現枚舉性的變量,比如血型、性別之類。
          以血型為例:

          class?Blood {
          public?final?static?
          int ?o = 0 ;
          public?final?static?
          int ?A = 1 ;
          public?final?static?
          int ?B = 2 ;
          public?final?static?
          int ?AB = 3 ;

          private?Blood();
          }



          class?person
          {
          private?
          int ?_blood;
          public?
          void ?setBlood( int ?b) {
          ???_blood
          = b;
          }

          如果要給一個person的實例設置血型,代碼如此:person.setBlood(Blood.A);
          這個寫法的代碼中,setBlood的參數為整型,如果如此調用person.setBlood(9);
          編譯器無法發現錯誤,只能靠人為控制,如果在方法setBlood中檢測參數的有效性,又超越了該方法的職責。

          重構后的代碼如下:

          final class?Blood{
          public?final?static?Blood?O
          =new?Blood(0);
          public?final?static?Blood?A
          =new?Blood(1);
          public?final?static?Blood?B
          =new?Blood(2);
          public?final?static?Blood?AB
          =new?Blood(3);
          private?
          int?_bloodCode;
          private?Blood(
          int?b){
          ????_bloodCode
          =b;
          ??}

          public?
          int?getCode(){
          ????
          return?_bloodCode;
          ??}

          }


          class?person
          {
          private?Blood?_blood;
          public?setBlood(Blood?b)
          {
          ????_blood
          =b;
          ??}

          }

          如此,(1)隱藏了血型的編碼細節
          ????????????(2)方便編譯期間發現錯誤
          ??????????? (3)避免使用超越數據范圍的參數

          Feedback

          # re: 神奇的重構技術(《重構》讀書筆記 一)  回復  更多評論   

          2005-09-19 09:26 by fanta
          規范的編程是不允許出現person.setBlood(9);這樣的代碼的,不能直接將數字常量直接放在代碼里的

          # re: 神奇的重構技術(《重構》讀書筆記 一)  回復  更多評論   

          2005-09-19 09:31 by JavaExplore
          那就public final static int H=9;
          person.setBlood(H);

          # re: 神奇的重構技術(《重構》讀書筆記 一)  回復  更多評論   

          2005-09-19 13:30 by usherlight
          Java沒有Enum嗎?

          # re: 神奇的重構技術(《重構》讀書筆記 一)  回復  更多評論   

          2005-09-19 14:59 by TiGERTiAN
          好像tiger里面新增了Enum..

          # re: 神奇的重構技術(《重構》讀書筆記 一)  回復  更多評論   

          2005-09-19 15:18 by ^ Mustang ^
          tiger李已經有enumeration了,不用多此一舉了

          # re: 神奇的重構技術(《重構》讀書筆記 一)  回復  更多評論   

          2005-09-20 13:33 by ^ Mustang ^
          你有沒有看過Tiger中enum的實現?你以為enum僅僅是一個面向過程的數據結構?Tiger中的enum是純面向對象的,里面封裝了很多方法,只不過你使用的時候覺察不到而已。

          # re: 神奇的重構技術(《重構》讀書筆記 一)  回復  更多評論   

          2005-09-20 13:36 by JavaExplore
          en 我覺得這種方法完全面向對象 是一種很不錯的設計
          沒有使用過Tiger中的enum,有機會一定看看

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


          網站導航:
           
          主站蜘蛛池模板: 云和县| 荃湾区| 江西省| 贺州市| 苍南县| 西畴县| 大厂| 营口市| 吉安市| 化州市| 江门市| 湘阴县| 图木舒克市| 岳西县| 监利县| 万年县| 陈巴尔虎旗| 二连浩特市| 肥东县| 日土县| 尤溪县| 镇雄县| 新乡市| 顺平县| 潢川县| 江源县| 五指山市| 泗洪县| 青岛市| 彭山县| 策勒县| 红桥区| 民权县| 武陟县| 平顶山市| 翁源县| 万宁市| 和平县| 建瓯市| 上高县| 阜平县|