added composite sample
This commit is contained in:
		
							
								
								
									
										21
									
								
								composite/src/main/java/com/iluwatar/App.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								composite/src/main/java/com/iluwatar/App.java
									
									
									
									
									
										Normal 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();
 | 
			
		||||
    	
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								composite/src/main/java/com/iluwatar/Letter.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								composite/src/main/java/com/iluwatar/Letter.java
									
									
									
									
									
										Normal 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
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										29
									
								
								composite/src/main/java/com/iluwatar/LetterComposite.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								composite/src/main/java/com/iluwatar/LetterComposite.java
									
									
									
									
									
										Normal 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();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								composite/src/main/java/com/iluwatar/Messenger.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								composite/src/main/java/com/iluwatar/Messenger.java
									
									
									
									
									
										Normal 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);
 | 
			
		||||
		
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										24
									
								
								composite/src/main/java/com/iluwatar/Sentence.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								composite/src/main/java/com/iluwatar/Sentence.java
									
									
									
									
									
										Normal 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(".");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										23
									
								
								composite/src/main/java/com/iluwatar/Word.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								composite/src/main/java/com/iluwatar/Word.java
									
									
									
									
									
										Normal 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
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user