使用state pattern替代if else

2016-02-19 19:12 13 1 收藏

今天图老师小编给大家展示的是使用state pattern替代if else,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!

【 tulaoshi.com - 编程语言 】

        大多数开发人员现在还在使用if else的过程结构,曾看过jdon的banq大哥写的一篇文章,利用command,aop模式替代if else过程结构。当时还不太明白,这几天看了《重构》第一章的影片租赁案例,感慨颇深。下面我来谈一谈为什么要用state pattern替代if else,替代if else有什么好处,以及给出具体代码怎么替代if else。本文参考jdon的“你还在使用if else吗?”及《重构》第一章。
   

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

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

   

  
   package  com.qujingbo.movie;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   /** */ /**
   * 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)   {
  

来源:http://www.tulaoshi.com/n/20160219/1620312.html

延伸阅读
水果可以替代蔬菜吗 婴幼儿正处在生长发育的旺盛时期,水果蔬菜富含多种维生素,对身体健康、增强对疾病的抵抗力十分重要,是宝宝每日不可缺少的食品。 一般来说,水果中含有人体必需的一些营养物质,还具有生食方便、宝宝爱吃的特点,所以有些父母误认为水果可以代替蔬菜,特别是对于不爱吃蔬菜的宝宝,总是拼命让其吃水果。其实,这种认...
吃水果经验分享 图钉问: 吃水果吃不了太多,携带也不方便,但几个水果一榨汁,也就一杯,很快就能喝下去,而且还可以好几种一起榨汁,但是喝果汁跟直接吃水果营养价值是一样的吗? 图老师答: 果汁是由水果经压榨去掉残渣(膳食纤维)而制成,所以果汁中就基本不含膳食纤维,而膳食纤维对预防便秘、控制体重和抗癌都意义重大。另...
标签: PHP
Pattern Modifiers - 规则表达式的修饰符   下面是当前规则表达式里可用的修饰. 括号内的名字是那些修饰符的内部 PCRE 名字. i (PCRE_CASELESS) 如果设置了这个修饰符, 则表达式不区分大小写. m (PCRE_MULTILINE) 默认的, PCRE 认为目标字符串值是单行字符串 (即使他确实包含多行). 行开始标记 (^) 只匹配字符串的开始...
标签: 婴儿奶粉
豆奶可替代婴儿奶粉吗? 什么是豆制代乳粉(豆奶)?什么孩子需豆奶? 大豆(黄豆)的营养价值很高,它含蛋白质30一40%,约为米、面等的4倍,鸡蛋的3倍,而且是优质蛋白,含豆油18—20%,约1/2以上为亚油酸等必需www.tulaoshi.com脂肪酸,有益健康。以大豆分离蛋白制成粉状,并加麦芽糊精、植物油等、各种矿物盐、维生素及婴儿奶粉所加各种营养...
5妙招替代闪光灯   如何让一张照片高大上起来,光线的运用很重要。但是自然光线有时候很难达到摄影师的需求,于是闪光灯的运用就很重要了。但对初学者来说,一般不会考虑购买闪光灯,而平时生活中又常常会遇到需要进行补光、布光的拍摄场景,这里就为大家介绍5个可以代替闪光灯的方法,相信可以起到一定帮助作用,同时加深对光线利用...

经验教程

576

收藏

88
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部