首页 > 学院 > 开发设计 > 正文

使用state pattern替代if else

2019-11-17 05:57:34
字体:
来源:转载
供稿:网友

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表