zoukankan      html  css  js  c++  java
  • 策略枚举

    策略枚举就是技巧性的代码编写,对于枚举中的抽象方法相应的枚举类型是需要实现这个抽象方法,这样会有个弊端,可能有的枚举类型需要实现的方法内容是一样的,这样显然看来代码会很重复,针对这个问题可以使用策略枚举,这中策略枚举的的思想就是代码的重用,重点就是如何巧妙实现代码的重用下面看代码

    *类说明:加班费计算,工作日加班2倍,节假日3倍
    */

    public enum BetterPayDay {
    MONDAY(PayType.WORK), TUESDAY(PayType.WORK), WEDNESDAY(
    PayType.WORK), THURSDAY(PayType.WORK), FRIDAY(PayType.WORK), 
    SATURDAY(PayType.REST), SUNDAY(PayType.REST),WUYI(PayType.REST);
    
    private final PayType payType;//成员变量
    
    BetterPayDay(PayType payType) {
    this.payType = payType;
    }
    
    double pay(double hoursOvertime) {
    return payType.pay(hoursOvertime);
    }
    
    //策略枚举 
    private enum PayType {
    WORK {
    double pay(double hoursOvertime) {
    return hoursOvertime*HOURS_WORK;
    }
    },
    REST {
    double pay(double hoursOvertime) {
    return hoursOvertime*HOURS_REST;
    }
    };
    
    private static final int HOURS_WORK = 2;
    private static final int HOURS_REST = 3;
    
    abstract double pay(double hoursOvertime);//抽象计算加班费的方法
    }
    
    public static void main(String[] args) {
    System.out.println(BetterPayDay.MONDAY.pay(7.5));
    }
    }


     计算加班费的方法  如果不用策略枚举的方式写结算,而是在BetterPayDay 中写一个抽象方法,那么周一 到周五 都是同样的代码乘以2倍的工资,这样重复的代码,写起来显然不合适,这是内部在定义一个枚举类,这个枚举的类中定义的行为就是专门计算加班费,所以定义两个枚举类型的行为一个是计算工作日的加班费,另一个是计算节假日的加班费,然后对应的枚举类型传入BetterPayDay  枚举类中的每个枚举类型的参数中,即BetterPayDay的构造中应当传入策略枚举类的实例,所以BetterPayDay 应当有 此成员变量private final PayType payType;    这样可以用一个方法,统一调用变量来计算加班费。达到重用代码的目的,程序更加的优雅!

    总结:枚举实例间都有相同的行为,将共同的行为抽取为枚举实例,即两层枚举来定义行为!!!

  • 相关阅读:
    MySQL性能优化的最佳20+条经验
    memcached demo 应用例子
    关于 MySQL 主从复制的配置(转)
    java date 日期 利用 Calendar 实现增加一年月日时分秒
    Struts2中s:set标签和s:if标签小结
    hibernate oracle 配置序列 实现自动增长
    mysql5.1.47二进制版本的安装(转)
    Confluence3.4的安装和配置
    linux MemCache安装手册
    Java实现文件拷贝的4种方法(转)
  • 原文地址:https://www.cnblogs.com/wcss/p/12124065.html
Copyright © 2011-2022 走看看