JAVA随笔

 

使用state pattern替代if else

大多数开发人员现在还在使用if else的过程结构,曾看过jdonbanq大哥写的一篇文章,利用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 ;
     }