使用state pattern替代if else

发表于:2007-06-22来源:作者:点击数: 标签:
下一页 1 2 3 4 5 大多数 开发 人员现在还在使用if else的过程结构,曾看过jdon的banq大哥写的一篇文章,利用command,aop模式替代if else过程结构。当时还不太明白,这几天看了《重构》第一章的影片租赁案例,感触颇深。 下面我来谈一谈为什么要用state patt

下一页 1 2 3 4 5 

         大多数开发人员现在还在使用if else的过程结构,曾看过jdon的banq大哥写的一篇文章,利用command,aop模式替代if else过程结构。当时还不太明白,这几天看了《重构》第一章的影片租赁案例,感触颇深。

下面我来谈一谈为什么要用state pattern替代if else,替代if else有什么好处,以及给出详细代码怎么替代if else。本文参考jdon的“你还在使用if else吗?”及《重构》第一章。

 

首先我们模仿影片租赁过程,顾客租凭影片,影片分为儿童片、普通片、新片。根据影片类型及租凭天数价格各不相同(优惠程度不同),用户累计积分不同。

 

OK ,现在我们使用 if else 表示。


使用state pattern替代if else(图一) package  com.qujingbo.movie;
使用state pattern替代if else(图一)
使用state pattern替代if else(图二)使用state pattern替代if else(图三) /** */ /**
使用state pattern替代if else(图四) * <p/> Title:影片基类
使用state pattern替代if else(图四) * </p>
使用state pattern替代if else(图四) * <p/> Description:
使用state pattern替代if else(图四) * </p>
使用state pattern替代if else(图四) * <p/> Date:2006-10-14 15:47:55
使用state pattern替代if else(图四) * </p>
使用state pattern替代if else(图四) * 
使用state pattern替代if else(图四) *  @author  EOMS 曲静波
使用state pattern替代if else(图四) *  @version  1.0
使用state pattern替代if else(图五)  */
使用state pattern替代if else(图二) 使用state pattern替代if else(图三) public   class  Movie  使用state pattern替代if else(图六) {
使用state pattern替代if else(图四)
使用state pattern替代if else(图四)      //  普通片标识
使用state pattern替代if else(图四)       public   static   int  REGULAR  =   1 ;
使用state pattern替代if else(图四)    
使用state pattern替代if else(图四)      //  新片标识
使用state pattern替代if else(图四)       public   static   int  NEW_RELEASE  =   2 ;
使用state pattern替代if else(图四)    
使用state pattern替代if else(图四)      //  儿童片标识
使用state pattern替代if else(图四)       public   static   int  CHILDREN  =   3 ;
使用state pattern替代if else(图四)    
使用state pattern替代if else(图七)使用state pattern替代if else(图八)      /** */ /**
使用state pattern替代if else(图四)     * 获取租赁影片总价
使用state pattern替代if else(图四)     *
使用state pattern替代if else(图四)     *  @param  movieCode
使用state pattern替代if else(图四)     * 影片类型
使用state pattern替代if else(图四)     *  @param  days
使用state pattern替代if else(图四)     * 租凭天数
使用state pattern替代if else(图四)     *  @return  租赁影片总价
使用state pattern替代if else(图四)     *  @throws  MovieException
使用state pattern替代if else(图四)     * 没有影片类型抛出异常
使用state pattern替代if else(图九)      */
使用state pattern替代if else(图七) 使用state pattern替代if else(图八)      public   double  getCharge( int  movieCode,  int  days)  throws  MovieException  使用state pattern替代if else(图六) {
使用state pattern替代if else(图四)      double  result  =   0 ;
使用state pattern替代if else(图四)      //  普通片
使用state pattern替代if else(图四)       if  (movieCode  ==  Movie.REGULAR)
使用state pattern替代if else(图四)      //  单价为2
使用state pattern替代if else(图七) 使用state pattern替代if else(图八)       使用state pattern替代if else(图六) {
使用state pattern替代if else(图四)     result  =   2 ;
使用state pattern替代if else(图四)      //  如果租赁天数大于2则,则优惠
使用state pattern替代if else(图七) 使用state pattern替代if else(图八)       if  (days  >   2 )  使用state pattern替代if else(图六) {
使用state pattern替代if else(图四)     result  +=  (days  -   2 )  *   1.5 ;
使用state pattern替代if else(图九)     }
使用state pattern替代if else(图四)      //  返回总价
使用state pattern替代if else(图四)       return  result;
使用state pattern替代if else(图九)     }
使用state pattern替代if else(图四)      //  最新发布片
使用state pattern替代if else(图七) 使用state pattern替代if else(图八)       else   if  (movieCode  ==  Movie.NEW_RELEASE)  使用state pattern替代if else(图六) {
使用state pattern替代if else(图四)      //  新片没有优惠,单价为3
使用state pattern替代if else(图四)       return  days  *   3 ;
使用state pattern替代if else(图九)     }
使用state pattern替代if else(图四)      //  儿童片
使用state pattern替代if else(图七) 使用state pattern替代if else(图八)       else   if  (movieCode  ==  Movie.CHILDREN)  使用state pattern替代if else(图六) {
使用state pattern替代if else(图四)      //  影片单价
使用state pattern替代if else(图四)      result  =   1.5 ;
使用state pattern替代if else(图四)      //  如果租赁时间大于3天则做价格优惠
使用state pattern替代if else(图七) 使用state pattern替代if else(图八)       if  (days  >   3 )  使用state pattern替代if else(图六) {
使用state pattern替代if else(图四)     result  +=  (days  -   3 )  *   1.5 ;
使用state pattern替代if else(图九)     }
使用state pattern替代if else(图四)      //  返回租赁影片总价
使用state pattern替代if else(图四)       return  result;
使用state pattern替代if else(图九)     }   else
使用state pattern替代if else(图四)      throw   new  MovieException( " 影片不存在 " );
使用state pattern替代if else(图九)     }
使用state pattern替代if else(图四)    
使用state pattern替代if else(图七)使用state pattern替代if else(图八)      /** */ /**
使用state pattern替代if else(图四)     * 获取租赁影片积分
使用state pattern替代if else(图四)     *
使用state pattern替代if else(图四)     *  @param  movieCode
使用state pattern替代if else(图四)     * 影片类型
使用state pattern替代if else(图四)     *  @param  days
使用state pattern替代if else(图四)     * 租凭天数
使用state pattern替代if else(图四)     *  @return  租赁影片积分
使用state pattern替代if else(图四)     *  @throws  MovieException
使用state pattern替代if else(图四)     * 没有影片类型抛出异常
使用state pattern替代if else(图九)      */
使用state pattern替代if else(图四)      public   double  getIntegral( int  movieCode,  int  days)  throws  MovieException
使用state pattern替代if else(图七)使用state pattern替代if else(图八)      使用state pattern替代if else(图六) {
使用state pattern替代if else(图四)      //  普通片
使用state pattern替代if else(图四)       if  (movieCode  ==  Movie.REGULAR)
使用state pattern替代if else(图四)      return  days  *   2 ;
使用state pattern替代if else(图四)      //  最新发布片
使用state pattern替代if else(图四)       else   if  (movieCode  ==  Movie.NEW_RELEASE)
使用state pattern替代if else(图四)      return  days  *   3 ;
使用state pattern替代if else(图四)      //  儿童片
使用state pattern替代if else(图四)       else   if  (movieCode  ==  Movie.CHILDREN)
使用state pattern替代if else(图四)      return  days  *   1.5 ;
使用state pattern替代if else(图四)             else
使用state pattern替代if else(图四)                 throw   new  MovieException( " 影片不存在 " );
使用state pattern替代if else(图四)    
使用state pattern替代if else(图九)        }
使用state pattern替代if else(图五)}
使用state pattern替代if else(图一)

 

原文转自:http://www.ltesting.net