使用state pattern替代if else

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

大多数开发人员现在还在使用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) {

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航