개념공부

디자인 패턴 : 컴포지트 패턴

Cadi 2025. 1. 9. 13:27

간단한 패턴이다. 

leaf와 Composite 모두 같은 인터페이스를 상속받고, 

구현은 leaf에서, 하며 composite에서는 재귀적으로 자신의 리스트 안에 있는 leaf에서 구현을 호출하게 한다. 

using System;
using System.Collections.Generic;
using UnityEngine;

public interface IComponent
{
    void Operation();
}

public class Composite : IComponent
{
    private List<IComponent> components = new List<IComponent>();

    public void Add(IComponent component)
    {
        components.Add(component);
    }

    public void Remove(IComponent component)
    {
        components.Remove(component);
    }

    public void Operation()
    {
        Debug.Log(this + " 호출");
        foreach (IComponent component in components)
        {
            component.Operation();
        }
    }
}

public class Leaf : IComponent
{
    public void Operation()
    {
        Debug.Log("Leaf 호출");
    }
}
void Start()
{
    Composite root = new Composite();
    Composite branch = new Composite();
    Leaf leaf1 = new Leaf();
    Leaf leaf2 = new Leaf();

    root.Add(branch);
    branch.Add(leaf1);
    branch.Add(leaf2);

    root.Operation();
}