2011-02-09 3 views
0

다형성 개체 트리를 만드는 코드 (C#)가 있습니다. 유형에 따라 객체에는 0-7 개의 자식이있을 수 있습니다. 그래서 기본적으로 내가 나를 여기에 도움을 줄 수있는 패턴을 찾고,이 모두가 정말 세련 보인다개체 트리를 구성하는 패턴이 필요합니다.

// pseudocode 
void BuildTree(Node root) { 
    if(root is A) { 
     root.a_data = ... 
     root.a_child = GenerateNewNode(some_constraints); 
     BuildTree(root.a_child) 
    } else if(root is B) { 
     // same stuff, for B. Note B may have different chldren, etc 
    } 
} 

: 바로 지금, 객체 '생성자는 아무것도하지 않고, 나는 재귀 도우미 함수를 사용하여 전체 개체 트리를 구성 . BuildTree 함수는 어떤 종류의 정책 인 것처럼 보이고 앞으로 다른 정책을 사용할 수 있기를 바랍니다.

아, 또 다른 복잡한 요소. BuildTree에는 이전 일에 조건부 인 것들이 있습니다. 예를 들어, B를 생성 한 적이 있다면 XYZ를 C 노드로해야합니다. 또는 현재 A의 자식을 생성 중이면 D를 생성하지 마십시오.

+0

팩트 트리 패턴을 사용해 보셨습니까? 하하하. 죄송합니다. –

답변

0

각 노드에 다형성 방법을 적용해야하므로 모든 노드가 자체적으로 건물을 구성 할 수 있습니다.

public class Node 
{ 
    public virtual BuildNode(IBuildStrategy strategy) 
    { 
    } 
} 

여전히 하위 트리 내에서 사용자 정의 전략에 대한 허용하면서 단순히

root.BuildNode(new InitialNodeBuildingStrategy()); 

트리를 채우기 위해 호출 할 수있는 방법입니다.

관련 문제