parent
33ea7335b1
commit
3c57bf7078
@ -135,7 +135,7 @@ public class OrcKing {
|
|||||||
Then it is used as follows
|
Then it is used as follows
|
||||||
|
|
||||||
```java
|
```java
|
||||||
OrcKing king = new OrcKing();
|
var king = new OrcKing();
|
||||||
king.makeRequest(new Request(RequestType.DEFEND_CASTLE, "defend castle")); // Orc commander handling request "defend castle"
|
king.makeRequest(new Request(RequestType.DEFEND_CASTLE, "defend castle")); // Orc commander handling request "defend castle"
|
||||||
king.makeRequest(new Request(RequestType.TORTURE_PRISONER, "torture prisoner")); // Orc officer handling request "torture prisoner"
|
king.makeRequest(new Request(RequestType.TORTURE_PRISONER, "torture prisoner")); // Orc officer handling request "torture prisoner"
|
||||||
king.makeRequest(new Request(RequestType.COLLECT_TAX, "collect tax")); // Orc soldier handling request "collect tax"
|
king.makeRequest(new Request(RequestType.COLLECT_TAX, "collect tax")); // Orc soldier handling request "collect tax"
|
||||||
|
@ -35,41 +35,56 @@ Taking our sentence example from above. Here we have the base class and differen
|
|||||||
|
|
||||||
```java
|
```java
|
||||||
public abstract class LetterComposite {
|
public abstract class LetterComposite {
|
||||||
|
|
||||||
private List<LetterComposite> children = new ArrayList<>();
|
private List<LetterComposite> children = new ArrayList<>();
|
||||||
|
|
||||||
public void add(LetterComposite letter) {
|
public void add(LetterComposite letter) {
|
||||||
children.add(letter);
|
children.add(letter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int count() {
|
public int count() {
|
||||||
return children.size();
|
return children.size();
|
||||||
}
|
}
|
||||||
protected void printThisBefore() {}
|
|
||||||
protected void printThisAfter() {}
|
protected void printThisBefore() {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void printThisAfter() {
|
||||||
|
}
|
||||||
|
|
||||||
public void print() {
|
public void print() {
|
||||||
printThisBefore();
|
printThisBefore();
|
||||||
for (LetterComposite letter : children) {
|
children.forEach(LetterComposite::print);
|
||||||
letter.print();
|
|
||||||
}
|
|
||||||
printThisAfter();
|
printThisAfter();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Letter extends LetterComposite {
|
public class Letter extends LetterComposite {
|
||||||
private char c;
|
|
||||||
|
private char character;
|
||||||
|
|
||||||
public Letter(char c) {
|
public Letter(char c) {
|
||||||
this.c = c;
|
this.character = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void printThisBefore() {
|
protected void printThisBefore() {
|
||||||
System.out.print(c);
|
System.out.print(character);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Word extends LetterComposite {
|
public class Word extends LetterComposite {
|
||||||
|
|
||||||
public Word(List<Letter> letters) {
|
public Word(List<Letter> letters) {
|
||||||
for (Letter l : letters) {
|
letters.forEach(this::add);
|
||||||
this.add(l);
|
}
|
||||||
|
|
||||||
|
public Word(char... letters) {
|
||||||
|
for (char letter : letters) {
|
||||||
|
this.add(new Letter(letter));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void printThisBefore() {
|
protected void printThisBefore() {
|
||||||
System.out.print(" ");
|
System.out.print(" ");
|
||||||
@ -77,11 +92,11 @@ public class Word extends LetterComposite {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class Sentence extends LetterComposite {
|
public class Sentence extends LetterComposite {
|
||||||
|
|
||||||
public Sentence(List<Word> words) {
|
public Sentence(List<Word> words) {
|
||||||
for (Word w : words) {
|
words.forEach(this::add);
|
||||||
this.add(w);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void printThisAfter() {
|
protected void printThisAfter() {
|
||||||
System.out.print(".");
|
System.out.print(".");
|
||||||
@ -93,39 +108,49 @@ Then we have a messenger to carry messages
|
|||||||
|
|
||||||
```java
|
```java
|
||||||
public class Messenger {
|
public class Messenger {
|
||||||
|
|
||||||
LetterComposite messageFromOrcs() {
|
LetterComposite messageFromOrcs() {
|
||||||
List<Word> words = List.of(
|
|
||||||
new Word(List.of(new Letter('W'), new Letter('h'), new Letter('e'), new Letter('r'), new Letter('e'))),
|
var words = List.of(
|
||||||
new Word(List.of(new Letter('t'), new Letter('h'), new Letter('e'), new Letter('r'), new Letter('e'))),
|
new Word('W', 'h', 'e', 'r', 'e'),
|
||||||
new Word(List.of(new Letter('i'), new Letter('s'))),
|
new Word('t', 'h', 'e', 'r', 'e'),
|
||||||
new Word(List.of(new Letter('a'))),
|
new Word('i', 's'),
|
||||||
new Word(List.of(new Letter('w'), new Letter('h'), new Letter('i'), new Letter('p'))),
|
new Word('a'),
|
||||||
new Word(List.of(new Letter('t'), new Letter('h'), new Letter('e'), new Letter('r'), new Letter('e'))),
|
new Word('w', 'h', 'i', 'p'),
|
||||||
new Word(List.of(new Letter('i'), new Letter('s'))),
|
new Word('t', 'h', 'e', 'r', 'e'),
|
||||||
new Word(List.of(new Letter('a'))),
|
new Word('i', 's'),
|
||||||
new Word(List.of(new Letter('w'), new Letter('a'), new Letter('y'))));
|
new Word('a'),
|
||||||
|
new Word('w', 'a', 'y')
|
||||||
|
);
|
||||||
|
|
||||||
return new Sentence(words);
|
return new Sentence(words);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LetterComposite messageFromElves() {
|
LetterComposite messageFromElves() {
|
||||||
List<Word> words = List.of(
|
|
||||||
new Word(List.of(new Letter('M'), new Letter('u'), new Letter('c'), new Letter('h'))),
|
var words = List.of(
|
||||||
new Word(List.of(new Letter('w'), new Letter('i'), new Letter('n'), new Letter('d'))),
|
new Word('M', 'u', 'c', 'h'),
|
||||||
new Word(List.of(new Letter('p'), new Letter('o'), new Letter('u'), new Letter('r'), new Letter('s'))),
|
new Word('w', 'i', 'n', 'd'),
|
||||||
new Word(List.of(new Letter('f'), new Letter('r'), new Letter('o'), new Letter('m'))),
|
new Word('p', 'o', 'u', 'r', 's'),
|
||||||
new Word(List.of(new Letter('y'), new Letter('o'), new Letter('u'), new Letter('r'))),
|
new Word('f', 'r', 'o', 'm'),
|
||||||
new Word(List.of(new Letter('m'), new Letter('o'), new Letter('u'), new Letter('t'), new Letter('h'))));
|
new Word('y', 'o', 'u', 'r'),
|
||||||
|
new Word('m', 'o', 'u', 't', 'h')
|
||||||
|
);
|
||||||
|
|
||||||
return new Sentence(words);
|
return new Sentence(words);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
And then it can be used as
|
And then it can be used as
|
||||||
|
|
||||||
```java
|
```java
|
||||||
LetterComposite orcMessage = new Messenger().messageFromOrcs();
|
var orcMessage = new Messenger().messageFromOrcs();
|
||||||
orcMessage.print(); // Where there is a whip there is a way.
|
orcMessage.print(); // Where there is a whip there is a way.
|
||||||
LetterComposite elfMessage = new Messenger().messageFromElves();
|
var elfMessage = new Messenger().messageFromElves();
|
||||||
elfMessage.print(); // Much wind pours from your mouth.
|
elfMessage.print(); // Much wind pours from your mouth.
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user