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

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

  • 相关阅读:
    我不是不懂
    Spring环境搭建,IoC容器初体验~
    备战招聘——信息获取与简历制作
    2013应届毕业生“华为”校招应聘总结
    Java知识积累——Sax解析xml文档
    Java知识积累——同时输出到控制台和指定文件,或直接输出到指定文件
    Java知识积累——静态代码块,非静态代码块,构造器的执行顺序和次数
    修改数据库表结构
    IE6/IE7/IE8/Firefox/Chrome/Safari的CSS hack兼容一览表
    项目代码风格要求
  • 原文地址:https://www.cnblogs.com/wcss/p/12124065.html
Copyright © 2011-2022 走看看