重构一:用多态替换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设计模式在重构中一个应用,希望对您有很好的帮助。

猜你喜欢

转载自blog.csdn.net/chens616/article/details/85037089