2010-12-10 2 views
0

C++에서 Composite 디자인 패턴을 사용하여 객체 그룹을 만들고 조작 할 수 있습니다. 내가 만났던 문제가 잎과 복합 재료는 동일하게 취급하고 있으며, 복합 잎 및 복합 구성 될 수 있기 때문에 개체가 명령이 복합에 발행 한 번 할 때보다 더에서 작동 할 수 있도록, 그것은 확실히 가능하다는 것이다.복합 디자인 패턴을 사용하여 다른 유형의 객체를 조작하려면 객체가 두 번 이상 작동하지 못하도록하는 방법이 있습니까?

예를 들어, 복합 그룹 1은 대상물 (A)이 두 번에 작동되며, 복합 그룹 2를 ON 조작하면 복합 그룹 2는 복합 그룹 1과 오브젝트 A를 함유하는 생성 된 다음 객체 A 및 B를 포함한다. 일부 응용 프로그램의 경우 이것은 문제가되지 않는다고 생각합니다.하지만 복합 객체에 발행 된 명령에 대해 고유 한 객체는 한 번만 조작하면 내 용도로 사용할 수 있습니다.

이 문제를 해결하는 관용적 인 방법이 있나요, 중 일부 객체의 멤버 함수의 다중 호출을 방지 또는 복합에 포함되는 것을 한 번 이상 개체를 방지하는 방법?

-

업데이트 : 으로 "관용"나는 이러한 유형의 문제를 처리하는 "전통"또는 "승인"방법을 의미한다. 나는 이것이 단지 확립 된 해결책이있는 공통적 인 문제라고 생각하고 있다고 생각한다.

+0

문제는 객체 A에 두 개의 '부모'가 있다는 것입니다. 여기에서 성취하려는 것은 무엇입니까? 왜이 개체는 두 그룹으로 구성되어 있습니까? 그것이 있어야만한다면, 작업을 적용하는 표준 아이디어는 예상대로 작동하지 않을 것입니다. 당신은 어떻게하면 '이'작업을 수행 한 객체를 추적해야하고, 그렇지 않은 경우 객체에서만 수행해야합니다. –

+0

가 무엇을 달성하려고하는 그룹의 유연성은 개별 개체에서하지만 개체 및 기존 그룹의 모든 조합에서뿐만 아니라 만들 수있다 - 기본적으로 복합 패턴이 잎을 치료 할 수있는, 오른쪽, 용이며 무엇을 같은 복합 재료 구성 요소 인터페이스를 통해? – zebraman

답변

1

난 당신이 관용적으로 무슨 뜻인지 모르겠지만, 해결책은 요 복합 재료의 구조를 탐색하는 방법에 따라 달라집니다. 다음은 몇 가지 옵션이

  • 진드기 수를 사용하여 중복

    • 당신은 이미 방문한 구성 요소 방문자를 사용하여 기억한다면, 무시하고 복합 요소가 두
    • 을 같은 틱 카운트 연속 호출을 무시해야 단계 방법들이 이번 라운드를 감동되었을 때 의미가 세트로 수술 후 두 단계 방법에 작동
    • 을 수행하여 복합 객체에 플래그를 설정하는 데 필요한 모든 복합 개체를 수집하기 전에 플래그를 지우 다음 라운드
  • +0

    감사합니다. 플래그 메소드를 사용해 보겠습니다. 하지만 궁금한 점은 Composite 패턴과 일반적으로 관련이없는이 유형의 문제 (객체의 멤버 함수를 여러 번 호출하지 않겠다는 것)가 궁금하십니까? 나는해야한다고 느낀다. 또는 이것이 중요하지 않은 응용 프로그램에 일반적으로 사용되는 복합 패턴입니까? 객체 당 하나의 함수 호출만을 보장하려면 더 나은 디자인 패턴이 필요합니까? – zebraman