STUDY/Design Pattern

복합체 패턴(Composite Pattern)

디리릭 2022. 11. 27. 21:12
728x90

복합체 패턴은 폴더와 파일 간의 트리 구조와 같이 여러 객체들을 부분과 전체의 계층을 표현하는 패턴이다.

컴포지트 패턴은 클라이언트가 복합 객체(group of object) 나 단일 객체를 동일하게 취급하는 것을 목적으로 한다.

여기서 컴포지트의 의도는 트리 구조로 작성하여, 전체-부분(whole-part) 관계를 표현하는 것이다.

전체-부분 관계의 대표적인 예는 Directory-File 이다.

전체-부분 관계를 트리 구조로 표현하고 싶을 경우.

전체-부분 관계를 클라이언트에서 부분, 관계 객체를 균일하게 처리하고 싶을 경우 복합체 패턴을 사용하면 유용하다.

구조

▷Component: 모든 컴포토넌트의 추상 클래스

▷ Leaf: Component인터페이스를 구현하는 클래스, 폴더- 파일 구조 중 파일부분

▷Composite Component인터페이스를 구현하고, Leaf 또는 Composite를 자식으로 가지고 있다.

구현

 
interface Nodecs
    {
        string getName();
    }
class File : Nodecs
    {
        private string name;
        public File(string name) 
        {
            this.name = name;
        }
        public string getName()
        {
            return name;
        }
    }
  class Directory : Nodecs
    {
        private string name;
        private List<Nodecs> children;

        public Directory(string name)
        {
            this.name = name;
            children = new List<Nodecs>();
        }

        public string getName()
        {
            return name;
        }
        public void add(Nodecs node) 
        {
            children.Add(node);
        }
    }
  static void Main(string[] args)
        {

            Directory dir = new Directory("dir1");
            dir.add(new File("file1-1"));
            dir.add(new Directory("dir2"));
            Directory dir2 = new Directory("dir3");
            dir2.add(new File("file3-1"));
            dir2.add(new Directory("dir4"));

        }
728x90

'STUDY > Design Pattern' 카테고리의 다른 글

퍼사드 패턴(Facade Pattern)  (0) 2022.12.15
장식자 패턴(Decorator Pattern)  (0) 2022.12.15
브릿지 패턴(Bridge Pattern)  (0) 2022.11.27
어댑터 패턴 (Adapter pattern)  (0) 2022.11.27
단일체 패턴(Singleton Pattern)  (0) 2022.11.27