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