WEB开发网
开发学院WEB开发Jsp 使用state pattern替代if else 阅读

使用state pattern替代if else

 2008-01-05 20:31:05 来源:WEB开发网   
核心提示: 大多数开发人员现在还在使用if else的过程结构,曾看过jdon的banq大哥写的一篇文章,使用state pattern替代if else,利用command,aop模式替代if else过程结构,当时还不太明白, OK ,现在我们使用 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)  {

Tags:使用 state pattern

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接