import java.util.ArrayList;
import java.util.List;
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : LetterComposite.java
// @ Date : 2016/8/24
// @ Author :
//
//
/*
* 组合接口
*/
public abstract class LetterComposite {
public List<LetterComposite> children = new ArrayList<>();
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();
}
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : Letter.java
// @ Date : 2016/8/24
// @ Author :
//
//
public class Letter extends LetterComposite {
private char c;
public Letter(char c) {
this.c = c;
}
protected void printThisBefore() {
System.out.print(c);
}
protected void printThisAfter() {
//no impl
}
}
import java.util.List;
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : Word.java
// @ Date : 2016/8/24
// @ Author :
//
//
public class Word extends LetterComposite {
public Word(List<Letter> word) {
for(Letter l : word)
{
this.add(l);
}
}
protected void printThisBefore() {
System.out.print(" ");
}
protected void printThisAfter() {
//no impl
}
}
import java.util.List;
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : Sentence.java
// @ Date : 2016/8/24
// @ Author :
//
//
public class Sentence extends LetterComposite {
public Sentence(List<Word> word) {
for(Word w : word)
{
this.add(w);
}
}
protected void printThisBefore() {
//no impl
}
protected void printThisAfter() {
System.out.print(".");
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : Messenger.java
// @ Date : 2016/8/24
// @ Author :
//
//
public class Messenger {
public LetterComposite messageFromOrcs() {
List<Word> words = new ArrayList<>();
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);
}
public LetterComposite messageFromElves() {
List<Word> words = new ArrayList<>();
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);
}
}
/*
* 组合模式能用于树状态结构对象和统一的接口(LetterComposite).
* 在这个例子我们有 由字母组合到单词,由单词再组合到句子.
*
*/
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();
}
}
/*
Message from the orcs:
Where there is a whip there is a way.
Message from the elves:
Much wind pours from your mouth.
*/
java设计模式进阶_composite
最新推荐文章于 2024-08-13 22:29:45 发布