| 
6 | 6 | import java.util.*;  | 
7 | 7 | import java.util.function.*;  | 
8 | 8 | import java.util.stream.*;  | 
 | 9 | +import enums.Outcome;  | 
 | 10 | +import static enums.Outcome.*;  | 
 | 11 | +import enums.Item;  | 
 | 12 | +import enums.Paper;  | 
 | 13 | +import enums.Scissors;  | 
 | 14 | +import enums.Rock;  | 
9 | 15 | import onjava.*;  | 
10 | 16 | import static onjava.Tuple.*;  | 
11 | 17 | 
 
  | 
12 |  | -enum Outcome { WIN, LOSE, DRAW }  | 
13 |  | - | 
14 |  | -interface Item {  | 
15 |  | -  Outcome compete(Item it);  | 
16 |  | -  Outcome eval(Paper p);  | 
17 |  | -  Outcome eval(Scissors s);  | 
18 |  | -  Outcome eval(Rock r);  | 
19 |  | -}  | 
20 |  | - | 
21 |  | -class Paper implements Item {  | 
22 |  | -  @Override public Outcome compete(Item it) {  | 
23 |  | -    return it.eval(this);  | 
24 |  | -  }  | 
25 |  | -  @Override public Outcome eval(Paper p) {  | 
26 |  | -    return Outcome.DRAW;  | 
27 |  | -  }  | 
28 |  | -  @Override public Outcome eval(Scissors s) {  | 
29 |  | -    return Outcome.WIN;  | 
30 |  | -  }  | 
31 |  | -  @Override public Outcome eval(Rock r) {  | 
32 |  | -    return Outcome.LOSE;  | 
33 |  | -  }  | 
34 |  | -  @Override public String toString() {  | 
35 |  | -    return "Paper";  | 
36 |  | -  }  | 
37 |  | -}  | 
38 |  | - | 
39 |  | -class Scissors implements Item {  | 
40 |  | -  @Override public Outcome compete(Item it) {  | 
41 |  | -    return it.eval(this);  | 
42 |  | -  }  | 
43 |  | -  @Override public Outcome eval(Paper p) {  | 
44 |  | -    return Outcome.LOSE;  | 
45 |  | -  }  | 
46 |  | -  @Override public Outcome eval(Scissors s) {  | 
47 |  | -    return Outcome.DRAW;  | 
48 |  | -  }  | 
49 |  | -  @Override public Outcome eval(Rock r) {  | 
50 |  | -    return Outcome.WIN;  | 
51 |  | -  }  | 
52 |  | -  @Override public String toString() {  | 
53 |  | -    return "Scissors";  | 
54 |  | -  }  | 
55 |  | -}  | 
56 |  | - | 
57 |  | -class Rock implements Item {  | 
58 |  | -  @Override public Outcome compete(Item it) {  | 
59 |  | -    return it.eval(this);  | 
60 |  | -  }  | 
61 |  | -  @Override public Outcome eval(Paper p) {  | 
62 |  | -    return Outcome.WIN;  | 
63 |  | -  }  | 
64 |  | -  @Override public Outcome eval(Scissors s) {  | 
65 |  | -    return Outcome.LOSE;  | 
66 |  | -  }  | 
67 |  | -  @Override public Outcome eval(Rock r) {  | 
68 |  | -    return Outcome.DRAW;  | 
69 |  | -  }  | 
70 |  | -  @Override public String toString() {  | 
71 |  | -    return "Rock";  | 
72 |  | -  }  | 
73 |  | -}  | 
74 |  | - | 
75 | 18 | class ItemFactory {  | 
76 | 19 |   static List<Supplier<Item>> items =  | 
77 | 20 |     Arrays.asList(  | 
 | 
0 commit comments