java设计模式进阶_composite

这里写图片描述

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.
 */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值