龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

使用state pattern替代if else

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
大多数开发人员现在还在使用if else的过程结构,曾看过jdon的banq大哥写的一篇文章,利用command,aop模式替代if else过程结构。当时还不太明白,这几天看了《重构》第一章的影片租赁案例

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

精彩图集

赞助商链接