大多數開發人員現在還在使用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) {