大多数开发人员现在还在使用if else的过程结构,曾看过jdon的banq大哥写的一篇文章,利用command,aop模式替代if else过程结构。当时还不太明白,这几天看了《重构》第一章的影片租赁案例,感慨颇深。下面我来谈一谈为什么要用state pattern替代if else,替代if else有什么好处,以及给出具体代码怎么替代if else。本文参考jdon的“你还在使用if else吗?”及《重构》第一章。
首先我们模拟影片租赁过程,顾客租凭影片,影片分为儿童片、普通片、新片。根据影片类型及租凭天数价格各不相同(优惠程度不同),用户累计积分不同。
OK ,现在我们使用 if else 表示。
package com.qujingbo.movie;
/** */ /**
* <p/> Title:影片基类
* </p>
* <p/> Description:
* </p>
* <p/> Date:2006-10-14 15:47:55
* </p>
*
* @author EOMS 曲静波
* @version 1.0
*/
public class Movie {
// 普通片标识
public static int REGULAR = 1 ;
// 新片标识
public static int NEW_RELEASE = 2 ;
// 儿童片标识
public static int CHILDREN = 3 ;
/** */ /**
* 获取租赁影片总价
*
* @param movieCode
* 影片类型
* @param days
* 租凭天数
* @return 租赁影片总价
* @throws MovieException
* 没有影片类型抛出异常
*/
public double getCharge( int movieCode, int days) throws MovieException {
double result = 0 ;
// 普通片
if (movieCode == Movie.REGULAR)
// 单价为2
{
result = 2 ;
// 假如租赁天数大于2则,则优惠
if (days > 2 ) {
result += (days - 2 ) * 1.5 ;
}
// 返回总价
return result;
}
// 最新发布片
else if (movieCode == Movie.NEW_RELEASE) {