@@ -35,53 +35,68 @@ Taking our sentence example from above. Here we have the base class and differen
35
35
36
36
``` java
37
37
public abstract class LetterComposite {
38
+
38
39
private List<LetterComposite > children = new ArrayList<> ();
40
+
39
41
public void add (LetterComposite letter ) {
40
42
children. add(letter);
41
43
}
44
+
42
45
public int count () {
43
46
return children. size();
44
47
}
45
- protected void printThisBefore () {}
46
- protected void printThisAfter () {}
48
+
49
+ protected void printThisBefore () {
50
+ }
51
+
52
+ protected void printThisAfter () {
53
+ }
54
+
47
55
public void print () {
48
56
printThisBefore();
49
- for (LetterComposite letter : children) {
50
- letter. print();
51
- }
57
+ children. forEach(LetterComposite :: print);
52
58
printThisAfter();
53
59
}
54
60
}
55
61
56
62
public class Letter extends LetterComposite {
57
- private char c;
63
+
64
+ private char character;
65
+
58
66
public Letter (char c ) {
59
- this . c = c;
67
+ this . character = c;
60
68
}
69
+
61
70
@Override
62
71
protected void printThisBefore () {
63
- System . out. print(c );
72
+ System . out. print(character );
64
73
}
65
74
}
66
75
67
76
public class Word extends LetterComposite {
77
+
68
78
public Word (List<Letter > letters ) {
69
- for (Letter l : letters) {
70
- this . add(l);
79
+ letters. forEach(this :: add);
80
+ }
81
+
82
+ public Word (char ... letters ) {
83
+ for (char letter : letters) {
84
+ this . add(new Letter (letter));
71
85
}
72
86
}
87
+
73
88
@Override
74
89
protected void printThisBefore () {
75
90
System . out. print(" " );
76
91
}
77
92
}
78
93
79
94
public class Sentence extends LetterComposite {
95
+
80
96
public Sentence (List<Word > words ) {
81
- for (Word w : words) {
82
- this . add(w);
83
- }
97
+ words. forEach(this :: add);
84
98
}
99
+
85
100
@Override
86
101
protected void printThisAfter () {
87
102
System . out. print(" ." );
@@ -93,39 +108,49 @@ Then we have a messenger to carry messages
93
108
94
109
``` java
95
110
public class Messenger {
111
+
96
112
LetterComposite messageFromOrcs () {
97
- List<Word > words = List . of(
98
- new Word (List . of(new Letter (' W' ), new Letter (' h' ), new Letter (' e' ), new Letter (' r' ), new Letter (' e' ))),
99
- new Word (List . of(new Letter (' t' ), new Letter (' h' ), new Letter (' e' ), new Letter (' r' ), new Letter (' e' ))),
100
- new Word (List . of(new Letter (' i' ), new Letter (' s' ))),
101
- new Word (List . of(new Letter (' a' ))),
102
- new Word (List . of(new Letter (' w' ), new Letter (' h' ), new Letter (' i' ), new Letter (' p' ))),
103
- new Word (List . of(new Letter (' t' ), new Letter (' h' ), new Letter (' e' ), new Letter (' r' ), new Letter (' e' ))),
104
- new Word (List . of(new Letter (' i' ), new Letter (' s' ))),
105
- new Word (List . of(new Letter (' a' ))),
106
- new Word (List . of(new Letter (' w' ), new Letter (' a' ), new Letter (' y' ))));
113
+
114
+ var words = List . of(
115
+ new Word (' W' , ' h' , ' e' , ' r' , ' e' ),
116
+ new Word (' t' , ' h' , ' e' , ' r' , ' e' ),
117
+ new Word (' i' , ' s' ),
118
+ new Word (' a' ),
119
+ new Word (' w' , ' h' , ' i' , ' p' ),
120
+ new Word (' t' , ' h' , ' e' , ' r' , ' e' ),
121
+ new Word (' i' , ' s' ),
122
+ new Word (' a' ),
123
+ new Word (' w' , ' a' , ' y' )
124
+ );
125
+
107
126
return new Sentence (words);
127
+
108
128
}
109
129
110
130
LetterComposite messageFromElves () {
111
- List<Word > words = List . of(
112
- new Word (List . of(new Letter (' M' ), new Letter (' u' ), new Letter (' c' ), new Letter (' h' ))),
113
- new Word (List . of(new Letter (' w' ), new Letter (' i' ), new Letter (' n' ), new Letter (' d' ))),
114
- new Word (List . of(new Letter (' p' ), new Letter (' o' ), new Letter (' u' ), new Letter (' r' ), new Letter (' s' ))),
115
- new Word (List . of(new Letter (' f' ), new Letter (' r' ), new Letter (' o' ), new Letter (' m' ))),
116
- new Word (List . of(new Letter (' y' ), new Letter (' o' ), new Letter (' u' ), new Letter (' r' ))),
117
- new Word (List . of(new Letter (' m' ), new Letter (' o' ), new Letter (' u' ), new Letter (' t' ), new Letter (' h' ))));
131
+
132
+ var words = List . of(
133
+ new Word (' M' , ' u' , ' c' , ' h' ),
134
+ new Word (' w' , ' i' , ' n' , ' d' ),
135
+ new Word (' p' , ' o' , ' u' , ' r' , ' s' ),
136
+ new Word (' f' , ' r' , ' o' , ' m' ),
137
+ new Word (' y' , ' o' , ' u' , ' r' ),
138
+ new Word (' m' , ' o' , ' u' , ' t' , ' h' )
139
+ );
140
+
118
141
return new Sentence (words);
142
+
119
143
}
144
+
120
145
}
121
146
```
122
147
123
148
And then it can be used as
124
149
125
150
``` java
126
- LetterComposite orcMessage = new Messenger (). messageFromOrcs();
151
+ var orcMessage = new Messenger (). messageFromOrcs();
127
152
orcMessage. print(); // Where there is a whip there is a way.
128
- LetterComposite elfMessage = new Messenger (). messageFromElves();
153
+ var elfMessage = new Messenger (). messageFromElves();
129
154
elfMessage. print(); // Much wind pours from your mouth.
130
155
```
131
156
0 commit comments