Skip to content

Commit 0c9136a

Browse files
committed
added composite sample
1 parent 6a3c206 commit 0c9136a

File tree

8 files changed

+184
-0
lines changed

8 files changed

+184
-0
lines changed

composite/pom.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0"?>
2+
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>com.iluwatar</groupId>
7+
<artifactId>java-design-patterns</artifactId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<groupId>com.iluwatar</groupId>
11+
<artifactId>composite</artifactId>
12+
<version>1.0-SNAPSHOT</version>
13+
<name>composite</name>
14+
<url>http://maven.apache.org</url>
15+
<dependencies>
16+
<dependency>
17+
<groupId>junit</groupId>
18+
<artifactId>junit</artifactId>
19+
<version>3.8.1</version>
20+
<scope>test</scope>
21+
</dependency>
22+
</dependencies>
23+
</project>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.iluwatar;
2+
3+
public class App
4+
{
5+
public static void main( String[] args )
6+
{
7+
8+
System.out.println("Message from the orcs: ");
9+
10+
LetterComposite orcMessage = new Messenger().messageFromOrcs();
11+
orcMessage.print();
12+
13+
System.out.println("\n");
14+
15+
System.out.println("Message from the elves: ");
16+
17+
LetterComposite elfMessage = new Messenger().messageFromElves();
18+
elfMessage.print();
19+
20+
}
21+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.iluwatar;
2+
3+
public class Letter extends LetterComposite {
4+
5+
private char c;
6+
7+
public Letter(char c) {
8+
this.c = c;
9+
}
10+
11+
@Override
12+
protected void printThisBefore() {
13+
System.out.print(c);
14+
}
15+
16+
@Override
17+
protected void printThisAfter() {
18+
// nop
19+
}
20+
21+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.iluwatar;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
public abstract class LetterComposite {
7+
8+
private List<LetterComposite> children = new ArrayList<LetterComposite>();
9+
10+
public void add(LetterComposite letter) {
11+
children.add(letter);
12+
}
13+
14+
public int count() {
15+
return children.size();
16+
}
17+
18+
protected abstract void printThisBefore();
19+
20+
protected abstract void printThisAfter();
21+
22+
public void print() {
23+
printThisBefore();
24+
for (LetterComposite letter: children) {
25+
letter.print();
26+
}
27+
printThisAfter();
28+
}
29+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.iluwatar;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.List;
6+
7+
public class Messenger {
8+
9+
LetterComposite messageFromOrcs() {
10+
11+
List<Word> words = new ArrayList<Word>();
12+
13+
words.add(new Word(Arrays.asList(new Letter('W'), new Letter('h'), new Letter('e'), new Letter('r'), new Letter('e'))));
14+
words.add(new Word(Arrays.asList(new Letter('t'), new Letter('h'), new Letter('e'), new Letter('r'), new Letter('e'))));
15+
words.add(new Word(Arrays.asList(new Letter('i'), new Letter('s'))));
16+
words.add(new Word(Arrays.asList(new Letter('a'))));
17+
words.add(new Word(Arrays.asList(new Letter('w'), new Letter('h'), new Letter('i'), new Letter('p'))));
18+
words.add(new Word(Arrays.asList(new Letter('t'), new Letter('h'), new Letter('e'), new Letter('r'), new Letter('e'))));
19+
words.add(new Word(Arrays.asList(new Letter('i'), new Letter('s'))));
20+
words.add(new Word(Arrays.asList(new Letter('a'))));
21+
words.add(new Word(Arrays.asList(new Letter('w'), new Letter('a'), new Letter('y'))));
22+
23+
return new Sentence(words);
24+
25+
}
26+
27+
LetterComposite messageFromElves() {
28+
29+
List<Word> words = new ArrayList<Word>();
30+
31+
words.add(new Word(Arrays.asList(new Letter('M'), new Letter('u'), new Letter('c'), new Letter('h'))));
32+
words.add(new Word(Arrays.asList(new Letter('w'), new Letter('i'), new Letter('n'), new Letter('d'))));
33+
words.add(new Word(Arrays.asList(new Letter('p'), new Letter('o'), new Letter('u'), new Letter('r'), new Letter('s'))));
34+
words.add(new Word(Arrays.asList(new Letter('f'), new Letter('r'), new Letter('o'), new Letter('m'))));
35+
words.add(new Word(Arrays.asList(new Letter('y'), new Letter('o'), new Letter('u'), new Letter('r'))));
36+
words.add(new Word(Arrays.asList(new Letter('m'), new Letter('o'), new Letter('u'), new Letter('t'), new Letter('h'))));
37+
38+
return new Sentence(words);
39+
40+
}
41+
42+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.iluwatar;
2+
3+
import java.util.List;
4+
5+
public class Sentence extends LetterComposite {
6+
7+
public Sentence(List<Word> words) {
8+
for (Word w: words) {
9+
this.add(w);
10+
}
11+
}
12+
13+
@Override
14+
protected void printThisBefore() {
15+
// nop
16+
}
17+
18+
@Override
19+
protected void printThisAfter() {
20+
System.out.print(".");
21+
}
22+
23+
24+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.iluwatar;
2+
3+
import java.util.List;
4+
5+
public class Word extends LetterComposite {
6+
7+
public Word(List<Letter> letters) {
8+
for (Letter l: letters) {
9+
this.add(l);
10+
}
11+
}
12+
13+
@Override
14+
protected void printThisBefore() {
15+
System.out.print(" ");
16+
}
17+
18+
@Override
19+
protected void printThisAfter() {
20+
// nop
21+
}
22+
23+
}

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,6 @@
2525
<module>singleton</module>
2626
<module>adapter</module>
2727
<module>bridge</module>
28+
<module>composite</module>
2829
</modules>
2930
</project>

0 commit comments

Comments
 (0)