• 策略枚举


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

    *类说明:加班费计算,工作日加班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;    这样可以用一个方法,统一调用变量来计算加班费。达到重用代码的目的,程序更加的优雅!

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

  • 相关阅读:
    Xcode And iOS9新特性
    AutoLayout
    本地化
    Map
    iOS多线程编程
    第三方抽屉效果
    iPad编程
    CoreData / MagicalRecord
    js清除单选框所选的值
    js获取背景颜色
  • 原文地址:https://www.cnblogs.com/wcss/p/12124065.html
Copyright © 2020-2023  润新知