程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 使用state pattern替代if else

使用state pattern替代if else

編輯:JAVA編程入門知識

        大多數開發人員現在還在使用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)   {
  
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved