자바 디자인 모드 의 조합 모드(Composite)

개술
일종 의 구조 형 모델 로 대상 을 트 리 구조 로 조직 하여'부분-전체'의 차원 구 조 를 나타 내 고 클 라 이언 트 가 하나의 대상 과 조합 대상 에 대한 사용 을 유일 하 게 한다.
UML 도표

위의 아 날로 그 에 포 함 된 캐릭터:
Component:그룹 에 참가 하 는 대상 에 게 공공 인 터 페 이 스 를 설명 합 니 다.조합 이 든 잎 노드 든.
Leaf:조합 에서 잎의 결점 대상 을 나타 내 고 잎의 결점 은 자결 점 이 없다.
Composite:그룹 에 참가 한 하위 대상 의 대상 을 나타 내 고 나 뭇 가 지 를 구축 하 는 행 위 를 말한다.
코드 예제

import java.util.ArrayList;
import java.util.List;

abstract class Component {

  protected String name;

  public Component(String name) {
    this.name = name;
  }

  public abstract void Add(Component c);

  public abstract void Remove(Component c);

  public abstract void GetChild(int depth);
}

class Leaf extends Component {

  public Leaf(String name) {
    super(name);
  }

  @Override
  public void Add(Component c) {
    System.out.println("Can not add to a leaf");
  }

  @Override
  public void Remove(Component c) {
    System.out.println("Can not remove from a leaf");
  }

  @Override
  public void GetChild(int depth) {
    String temp = " ";
    for (int i = 0; i < depth; i++) {
      temp += "-";
      System.out.println(temp + name);
    }
  }

}

class Composite extends Component {

  private List<Component> children = new ArrayList<>();

  public Composite(String name) {
    super(name);
  }

  @Override
  public void Add(Component c) {
    children.add(c);
  }

  @Override
  public void Remove(Component c) {
    children.remove(c);
  }

  @Override
  public void GetChild(int depth) {

    for (Component c : children) {
      c.GetChild(depth);
    }
  }

}

public class Main {

  public static void main(String args[]) {
    Composite root = new Composite("root");
    root.Add(new Leaf("Leaf A"));
    root.Add(new Leaf("Leaf B"));

    Composite compX = new Composite("Composite X");
    compX.Add(new Leaf("Leaf XA"));
    compX.Add(new Leaf("Leaf XB"));
    root.Add(compX);

    Composite compXY = new Composite("Composite XY");
    compXY.Add(new Leaf("Leaf XYA"));
    compXY.Add(new Leaf("Leaf XYB"));
    compX.Add(compXY);

    root.GetChild(3);
  }

}

응용 장면
1.대상 을 나타 내 는 부분-전체적인 차원 구 조 를 요구한다.
2.클 라 이언 트 가 조합 대상 과 단일 대상 의 차 이 를 무시 하려 면 클 라 이언 트 는 조합 구조의 모든 대상 을 통일 적 으로 사용 합 니 다.
조합 모드 는 Leaf 대상 과 Composite 대상 으로 구 성 된 클래스 구 조 를 정의 합 니 다.
클 라 이언 트 를 간단하게 만 들 기;
하위 위 젯 을 추가 하거나 삭제 하 는 것 이 쉬 워 집 니 다.
 이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기