2012-11-24 1 views
1

Icon 인터페이스를 구현하는 Java 클래스 (SquareIcon)가 있습니다. 사각형을 그립니다. 사각형을 만들 때 크기와 색상을 선택할 수 있습니다. 이제 복합 패턴 (CompositeIcon)을 사용하여 클래스를 작성하여 여러 개의 다른 사각형을 그릴 수있게하려고합니다. 나는 Composite Pattern에 대해 읽었지만, 제대로 작동하지 않는 것처럼 보입니다. SquareIcon 클래스에서복합 패턴을 사용하여 클래스를 만드는 방법은 무엇입니까?

, 나는 다음과 같은 세 가지 방법이 있습니다

  • getIconHeight
  • getIconWidht
  • 내가 너무 CompositeIcon 클래스에서이 모든 것을 넣어야 할 paintIcon

, 권리? 하지만 어떻게해야합니까? 나는이 라인을 따라 뭔가 생각을 해 봤는데,하지만이 맞다면 나도 몰라 :

public int getIconWidth() { 
    for (Icon i : icons) { 
    i.getIconWidth(); 
    } 
} 
는 4 개 매개 변수를 사용하기 때문에 나는 또한 어떻게 paintIcon 방법에 대해이 작업을 수행하는 아무 생각이

, 어떤 이것이 작동하지 않는다는 것을 의미합니다.

답변

4

복합 패턴은 잎과 부모 클래스를 동일하게 취급합니다.

당신은 공통 인터페이스로 시작해야합니다 :

public interface Icon { 
    void paint(); 
} 

잎이 인터페이스를 구현 :

public class ParentIcon implements Icon { 
    private List<Icon> children = new ArrayList<Icon>(); 
    public void paint() { 
     for (Icon child : children) { 
      child.paint(); 
     } 
    } 
} 
:

public class LeafIcon implements Icon { 
    public void paint() { 
     // more here 
    } 
} 

그래서 잎 아이들의 컬렉션을 가지고있는 부모를 않습니다

코드는 아이콘 모음을 처리해야합니다. 나뭇잎과 부모에 대한 모든 paint() 메서드를 사용할 수 있습니다.

List<Icon> icons = new ArrayList<Icon>(); 
for (Icon icon : icons) { 
    icon.paint(); 
} 

컬렉션의 모든 부모는 재귀 적으로 그 아이 트리의 리프 노드에있는 모든 방법을 호출합니다.