Created
October 25, 2019 09:21
-
-
Save david-romero/4c2c14a3d083f33565fb55d24857c4e9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// The strategy enum pattern | |
enum PayrollDay { | |
MONDAY, | |
TUESDAY, | |
WEDNESDAY, | |
THURSDAY, | |
FRIDAY, | |
SATURDAY(PayType.WEEKEND), | |
SUNDAY(PayType.WEEKEND); | |
private final PayType payType; | |
PayrollDay(PayType payType) { | |
this.payType = payType; | |
} | |
PayrollDay() { | |
this(PayType.WEEKDAY); | |
} // Default | |
int pay(int minutesWorked, int payRate) { | |
return payType.pay(minutesWorked, payRate); | |
} | |
// The strategy enum type | |
private enum PayType { | |
WEEKDAY { | |
int overtimePay(int minsWorked, int payRate) { | |
return minsWorked <= MINS_PER_SHIFT ? 0 : (minsWorked - MINS_PER_SHIFT) * payRate / 2; | |
} | |
}, | |
WEEKEND { | |
int overtimePay(int minsWorked, int payRate) { | |
return minsWorked * payRate / 2; | |
} | |
}; | |
abstract int overtimePay(int mins, int payRate); | |
private static final int MINS_PER_SHIFT = 8 * 60; | |
int pay(int minsWorked, int payRate) { | |
int basePay = minsWorked * payRate; | |
return basePay + overtimePay(minsWorked, payRate); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment