목적
- 객체를 트리구조로 구성하고 개별객체와 복합객체(Composite)가 구성
- 클라이언트에서는 두 객체를 동일하게 사용할 수 있음
- 이 패턴을 적용하면, 기존의 오브젝트를 재이용하기 수월해지고, 오브젝트의 동적인 조립을 실현하는 것이 수월해진다
구조
- Leaf클래스와 Composite클래스가 있음
- Leaf클래스와 Composite클래스는 동일한 Abstract를 상속받음
- Composite클래스는 Leaf클래스들을 답는 용도
예시
<Leaf>
FactoryMethod에서 사용한 유닛 Abstraction을 상속받은 Marine과 Medic 코드를 활용한다.
Marine, Medic은 Leaf 클래스라고 할 수 있다.
정말 스타크래프트 유닛 구성은 이해하기 참 쉽다. 다음부터도 계속 스타크래프트 유닛 구성으로 나만의 예제를 마들어야지!!
아무튼 다음은 유닛을 상속받은 Composite 클래스를 만들것이다.
<Composite>
<Main>
자 사용하는 바법은 다음과 같다.
그냥 마린과 메딕을 각각 객체를 생성한후, 또 각각 attack()을 두번 한다. 그러면 각자 공격을 할것이다. 마린은 총을쏘고 메딕을 치료를하고
Composite를 활용해도 동일한 결과를 가져올 수 있다.
Corps객체를 생성하고(부대객체라고 생각하면 된다). 그리고 Corps에 생성된 두 Unit 객체를 add한다. (부대지정 ctrl + 1)한뒤 부대지정 어택!! 을 한다.
이려면 마린찍고 어택, 메딕찍고 어택 = 마린, 메딕 부대지정 후 어택 이랑 동일한 결과를 가져오는 것이다.
'Language > Design Pattern' 카테고리의 다른 글
[Design Pattern: 구조] 10. Pacade (0) | 2014.03.03 |
---|---|
[Design Pattern: 구조] 9. Decorator (0) | 2014.03.03 |
[Design Patter: 구조] 7. Bridge (0) | 2014.03.03 |
[Desigon Pattern: 생성] 4. Prototype (0) | 2014.02.28 |
[Design Pattern: 생성] 5. Builder (0) | 2014.02.28 |