1
1
package effectivejava .chapter6 .item34 ;
2
2
3
+ import static effectivejava .chapter6 .item34 .PayrollDay .PayType .*;
4
+
3
5
// The strategy enum pattern (Page 166)
4
6
enum PayrollDay {
5
- MONDAY , TUESDAY , WEDNESDAY , THURSDAY , FRIDAY ,
6
- SATURDAY (PayType .WEEKEND ), SUNDAY (PayType .WEEKEND );
7
+ MONDAY (WEEKDAY ), TUESDAY (WEEKDAY ), WEDNESDAY (WEEKDAY ),
8
+ THURSDAY (WEEKDAY ), FRIDAY (WEEKDAY ),
9
+ SATURDAY (WEEKEND ), SUNDAY (WEEKEND );
7
10
8
11
private final PayType payType ;
9
12
10
13
PayrollDay (PayType payType ) { this .payType = payType ; }
11
- PayrollDay () { this (PayType .WEEKDAY ); } // Default
12
14
13
15
int pay (int minutesWorked , int payRate ) {
14
16
return payType .pay (minutesWorked , payRate );
15
17
}
16
18
17
19
// The strategy enum type
18
- private enum PayType {
20
+ enum PayType {
19
21
WEEKDAY {
20
22
int overtimePay (int minsWorked , int payRate ) {
21
23
return minsWorked <= MINS_PER_SHIFT ? 0 :
@@ -36,4 +38,9 @@ int pay(int minsWorked, int payRate) {
36
38
return basePay + overtimePay (minsWorked , payRate );
37
39
}
38
40
}
41
+
42
+ public static void main (String [] args ) {
43
+ for (PayrollDay day : values ())
44
+ System .out .printf ("%-10s%d%n" , day , day .pay (8 * 60 , 1 ));
45
+ }
39
46
}
0 commit comments