어떻게 말하나요? ! 동물(결합 개체)과 마찬가지로 자손(잎 개체)을 낳을 때 그 자손은 특정 기능(예: 구멍 파기, 잘 듣기 등)을 갖게 됩니다. 루트(복합 개체)와 나무에서 바깥쪽으로 자라는 다른 가지(복합 개체)와 해당 가지에서 바깥쪽으로 자라는 잎(잎 개체)이 있습니다. 즉, 조상이 이미 존재하는 경우 이 조상에서 파생된 다른 자식(이 조상 아래에 결합된 다른 개체 포함)이 이미 특정 기능을 갖고 있는 한 상속과 비슷해 보입니다. "컴포지션 패턴"에는 복합 개체 계층 구조에 리프 개체와 복합 개체라는 두 가지 유형의 개체가 있습니다. 결합된 패턴은 많은 수의 개체에서 작동하는 데 적합합니다.
"컴포지션 모드"는 프로젝트 작업 시 프로젝트에 나타날 모든 메서드를 컴포지션 개체(잎 개체의 메서드 포함)에 정의해야 하며 해당 리프 개체가 컴포지션 개체를 상속한다는 의미입니다. 복합 개체가 인스턴스화되면 그에 따라 리프 개체의 메서드도 인스턴스화됩니다. 제가 말한 내용이 다소 혼란스러울 수도 있습니다. 예를 들어 설명하겠습니다.
"구성 모드"는 웹에서 동적 사용자 인터페이스를 만들기 위해 맞춤화된 모드입니다. 이 패턴을 사용하면 단일 명령으로 여러 개체에 대해 복잡하거나 반복적인 동작을 트리거할 수 있습니다.
"결합 모드"를 사용하면 두 가지 주요 이점을 얻을 수 있습니다.
1. 개체 모음과 특정 하위 개체를 동일한 방식으로 처리할 수 있습니다.
2. 하위 개체 배치를 트리 구조로 구성하는 데 사용할 수 있으며 전체 트리를 탐색할 수 있습니다.
조합 모드는 다음 두 가지 조건이 동시에 충족되는 경우에만 적합합니다.
1. 특정 계층 시스템으로 구성된 배치 개체가 있습니다(특정 구조는 개발 중에 알려지지 않을 수 있습니다).
2. 이 개체 배치 또는 그 일부에 대해 작업을 수행하고 싶습니다.
예를 살펴보겠습니다.
구체적인 요구 사항은 사진 갤러리를 만들고 사진 갤러리의 특정 부분을 선택적으로 숨기거나 표시할 수 있어야 한다는 것입니다. 이는 단일 이미지일 수도 있고 이미지 갤러리일 수도 있습니다. 이제 이 기능을 완성하려면 두 개의 클래스가 필요합니다. 그림 라이브러리로 사용되는 복합 개체 클래스와 그림 자체에 사용되는 리프 개체 클래스입니다. 코드는 다음과 같습니다.
위 코드에서 가장 먼저 정의된 것은 복합 객체 클래스 및 리프 객체 클래스가 구현해야 하는 인터페이스입니다. 비전과 페니의 기존 조합 외에도 이러한 유형의 작업에는 숨기기 및 표시만 포함됩니다. 다음으로 리프 객체를 정의합니다. 리프 객체는 hide 및 show를 구현합니다.