added composite sample

This commit is contained in:
Ilkka Seppala 2014-08-13 21:14:03 +03:00
parent 6a3c206bce
commit 0c9136ac01
8 changed files with 184 additions and 0 deletions

23
composite/pom.xml Normal file
View File

@ -0,0 +1,23 @@
<?xml version="1.0"?>
<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"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.iluwatar</groupId>
<artifactId>java-design-patterns</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.iluwatar</groupId>
<artifactId>composite</artifactId>
<version>1.0-SNAPSHOT</version>
<name>composite</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,21 @@
package com.iluwatar;
public class App
{
public static void main( String[] args )
{
System.out.println("Message from the orcs: ");
LetterComposite orcMessage = new Messenger().messageFromOrcs();
orcMessage.print();
System.out.println("\n");
System.out.println("Message from the elves: ");
LetterComposite elfMessage = new Messenger().messageFromElves();
elfMessage.print();
}
}

View File

@ -0,0 +1,21 @@
package com.iluwatar;
public class Letter extends LetterComposite {
private char c;
public Letter(char c) {
this.c = c;
}
@Override
protected void printThisBefore() {
System.out.print(c);
}
@Override
protected void printThisAfter() {
// nop
}
}

View File

@ -0,0 +1,29 @@
package com.iluwatar;
import java.util.ArrayList;
import java.util.List;
public abstract class LetterComposite {
private List<LetterComposite> children = new ArrayList<LetterComposite>();
public void add(LetterComposite letter) {
children.add(letter);
}
public int count() {
return children.size();
}
protected abstract void printThisBefore();
protected abstract void printThisAfter();
public void print() {
printThisBefore();
for (LetterComposite letter: children) {
letter.print();
}
printThisAfter();
}
}

View File

@ -0,0 +1,42 @@
package com.iluwatar;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Messenger {
LetterComposite messageFromOrcs() {
List<Word> words = new ArrayList<Word>();
words.add(new Word(Arrays.asList(new Letter('W'), new Letter('h'), new Letter('e'), new Letter('r'), new Letter('e'))));
words.add(new Word(Arrays.asList(new Letter('t'), new Letter('h'), new Letter('e'), new Letter('r'), new Letter('e'))));
words.add(new Word(Arrays.asList(new Letter('i'), new Letter('s'))));
words.add(new Word(Arrays.asList(new Letter('a'))));
words.add(new Word(Arrays.asList(new Letter('w'), new Letter('h'), new Letter('i'), new Letter('p'))));
words.add(new Word(Arrays.asList(new Letter('t'), new Letter('h'), new Letter('e'), new Letter('r'), new Letter('e'))));
words.add(new Word(Arrays.asList(new Letter('i'), new Letter('s'))));
words.add(new Word(Arrays.asList(new Letter('a'))));
words.add(new Word(Arrays.asList(new Letter('w'), new Letter('a'), new Letter('y'))));
return new Sentence(words);
}
LetterComposite messageFromElves() {
List<Word> words = new ArrayList<Word>();
words.add(new Word(Arrays.asList(new Letter('M'), new Letter('u'), new Letter('c'), new Letter('h'))));
words.add(new Word(Arrays.asList(new Letter('w'), new Letter('i'), new Letter('n'), new Letter('d'))));
words.add(new Word(Arrays.asList(new Letter('p'), new Letter('o'), new Letter('u'), new Letter('r'), new Letter('s'))));
words.add(new Word(Arrays.asList(new Letter('f'), new Letter('r'), new Letter('o'), new Letter('m'))));
words.add(new Word(Arrays.asList(new Letter('y'), new Letter('o'), new Letter('u'), new Letter('r'))));
words.add(new Word(Arrays.asList(new Letter('m'), new Letter('o'), new Letter('u'), new Letter('t'), new Letter('h'))));
return new Sentence(words);
}
}

View File

@ -0,0 +1,24 @@
package com.iluwatar;
import java.util.List;
public class Sentence extends LetterComposite {
public Sentence(List<Word> words) {
for (Word w: words) {
this.add(w);
}
}
@Override
protected void printThisBefore() {
// nop
}
@Override
protected void printThisAfter() {
System.out.print(".");
}
}

View File

@ -0,0 +1,23 @@
package com.iluwatar;
import java.util.List;
public class Word extends LetterComposite {
public Word(List<Letter> letters) {
for (Letter l: letters) {
this.add(l);
}
}
@Override
protected void printThisBefore() {
System.out.print(" ");
}
@Override
protected void printThisAfter() {
// nop
}
}

View File

@ -25,5 +25,6 @@
<module>singleton</module>
<module>adapter</module>
<module>bridge</module>
<module>composite</module>
</modules>
</project>