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 |