디자인 모드 12: 조합 모드

4718 단어
조합 모드 (Composite DP) 는 대상 을 트 리 구조 로 조합 해 '전체 - 부분' 차원 구 조 를 표현 할 수 있 도록 한다.조합 은 고객 으로 하여 금 개별 대상 과 대상 조합 을 일치 하 게 처리 하 게 할 수 있다 (원문: Compose objects into tree structures to represent part - whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly).이 모델 은 안 드 로 이 드 에 도 있 는데 바로 View 의 차원 구조 이다.뷰 그룹 은 뷰 의 용기 로 사용 할 수 있 고 그 자체 도 뷰 이기 때문에 트 리 구 조 를 형성 할 수 있다.이 모델 의 장점 은 어디 에 있 습 니까?개인 적 으로 복잡 한 나무 모양 의 구 조 를 상대 적 으로 간소화 하고 처리 하기에 편리 하 다 고 느낀다.
코드: 지금 은 알파벳, 단어, 문장의 조합 입 니 다.먼저 조합 모드 의 기본 클래스 를 정의 합 니 다:
/**
 * 
 * Composite interface.
 * 
 */
public abstract class LetterComposite {

  private List 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();

  /**
   * Print
   */
  public void print() {
    printThisBefore();
    for (LetterComposite letter : children) {
      letter.print();
    }
    printThisAfter();
  }
}

알파벳:
/**
 *
 * Letter
 *
 */
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
  }
}

단어:
/**
 *
 * Word
 *
 */
public class Word extends LetterComposite {

  /**
   * Constructor
   */
  public Word(List letters) {
    for (Letter l : letters) {
      this.add(l);
    }
  }

  @Override
  protected void printThisBefore() {
    System.out.print(" ");
  }

  @Override
  protected void printThisAfter() {
    // nop
  }
}

문장:
/**
 *
 * Sentence
 *
 */
public class Sentence extends LetterComposite {

  /**
   * Constructor
   */
  public Sentence(List words) {
    for (Word w : words) {
      this.add(w);
    }
  }

  @Override
  protected void printThisBefore() {
    // nop
  }

  @Override
  protected void printThisAfter() {
    System.out.print(".");
  }
}

아 날로 그 정보:
/**
 * 
 * Messenger
 *
 */
public class Messenger {

  LetterComposite messageFromOrcs() {

    List 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);

  }

  LetterComposite messageFromElves() {

    List 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);

  }

}

print 를 호출 하면 하위 조합의 print 를 호출 하여 문장 전 체 를 인쇄 합 니 다.

좋은 웹페이지 즐겨찾기