重構手法30:Replace Type Code with Class (以類取代類型碼)

來源:互聯網
上載者:User

 

類之中有一個數實值型別碼,但它並不影響類的行為。以一個新的類替換該數實值型別碼。

動機:在以C為基礎的程式設計語言中,類型碼或枚舉值很常見。如果帶著一個有意義的符號名,類型碼的可讀性還不錯。問題在於,符號名終究只是個別名,編譯器看見的、進行類型檢驗的,還是背後那個數值。任何接受類型碼作為參數的函數,所期望的實際上是一個數值,無法強制使用符號名。這會大大降低代碼的可讀性,從而成為bug之源。

       如果把那樣的數值換成一個類,編譯器就可以對這個類進行類型檢驗。只要為這個類提供工廠函數,你就可以始終保證只有合法的執行個體才會被常見出來,而且他們都會被傳遞給正確的宿主對象。

       但是,在使用Replace Type Code with Class (以類取代類型碼)之前,你應該先考慮類型碼的其他替換方式。只有當類型碼是純粹資料時(也就是類型碼不會在switch語句中引起行為變化時),你才能以類來取代它。更重要的是:任何switch語句都應該運用Replace Conditional with Polymorphism (以多態取代條件運算式)去掉。為了進行那樣的重構,你首先必須運用 Replace Type Code with Subclass (以子類取代類型碼)或Replace Type Code with State/Strategy (以狀態策略取代類型碼),把類型碼處理掉。

       即使一個類型碼不會因其數值的不同而引起行為上的差異,宿主類中的某些行為還是可能更適合放置於類型碼類中,因此你還應該留意是否有必要使用Move Method(搬移函數)將一兩個函數搬過去。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.