1. 程式人生 > >重構一:用多型替換switch語句

重構一:用多型替換switch語句

    程式設計中我們儘量少用switch語句,使用switch語句會出現大量重複程式碼,我們可以採用java的多型特性,使用state模式來替換switch語句,具體方式如下:

   舉個例子,假設一個電影租賃的程式,包括客戶(Customer)、租賃(Rental)、電影(Movie)三個類,

在Movie類中,有一個獲取電影租金的方法getChartge,它需要根據電影的型別和租期來計算電影租金,方法中我們採用了switch語句來進行電影型別判斷和租金方法計算。

很顯然,case分支中包括大量計算租金的程式碼,還有可能出現重複,將來電影型別擴充和修改需要越多複雜的switch語句,這樣不利於程式的擴充套件和維護,這時候我們可以運用state模式新增一箇中間層類Price來代表電影的型別,每一種型別對應一個Price的子類,具體關係見下圖:

同時我們在Price類中新增一個抽象的函式getPriceCode獲取型別程式碼,在子類中實現,

做完這些之後,我們在Movie類中利用多型機制新增Price類的引用和方法的呼叫,

我們接下來對包含switch語句的租賃價格的方法getCharge方法進行改造,我們在將Switch程式碼段移植到Price類中,對每一個case分支在Price子類的覆蓋getCharge方法,

 

好了,我們通過新增一箇中間層類Price利用java的多型特性將Movice中的getCharge方法進行了重構,如果將來新增影片型別,修改費用計算方式,可以通過新增Price子類和修改getCharge方法類進行,這也是state設計模式在重構中一個應用,希望對您有很好的幫助。