Effective Java 策略枚举

//策略枚举
public enum PayrollDay {

MONDAY(PayType.WEEKDAY),
TUESDAY(PayType.WEEKDAY),
WEDNESDAY(PayType.WEEKDAY),
THURSDAY(PayType.WEEKDAY),
FRIDAY(PayType.WEEKDAY),
SATURDAY(PayType.WEEKEND),
SUNDAY(PayType.WEEKEND);

private final PayType payType;

PayrollDay(PayType payType){
this.payType = payType;
}

double pay(double hoursWorked,double payRate){
return payType.pay(hoursWorked, payRate);
}
//the strategy enum type
private enum PayType {
WEEKDAY {
double overtimePay(double hours,double payRate){
return hours <= HOURS_PER_SHIFT ? 0 : (hours - HOURS_PER_SHIFT) * payRate / 2;
}
},
WEEKEND{
double overtimePay(double hours,double payRate){
return hours * payRate / 2;
}
};

private static final int HOURS_PER_SHIFT = 8;

abstract double overtimePay(double hoursWorked,double payRate);

double pay(double hoursWorked,double payRate){
double basePay = hoursWorked * payRate;
return basePay + overtimePay(hoursWorked, payRate);
}
}
}

测试类
public class PayrollDayTest {

public static void main(String[] args) {
System.out.println(PayrollDay.MONDAY.pay(12d, 12d));
System.out.println(PayrollDay.TUESDAY.pay(12d, 12d));
System.out.println(PayrollDay.WEDNESDAY.pay(12d, 12d));
System.out.println(PayrollDay.THURSDAY.pay(12d, 12d));
System.out.println(PayrollDay.FRIDAY.pay(12d, 12d));
System.out.println(PayrollDay.SATURDAY.pay(12d, 12d));
System.out.println(PayrollDay.SUNDAY.pay(12d, 12d));

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值