<디자인패턴입문> 8. Composite 패턴
by BFine반응형
www.yes24.com/Product/Goods/2918928
가. 무엇인가
a. 하나의 집합체와 재귀적인 구조
- 그릇과 내용물을 동일시 해서 재귀적인 구조를 만들기 위한 디자인 패턴
- 예로 디렉터리는 내부에 파일 또는 하위디렉토리가 있을 수 있다.
=> 상자 안의 상자로 된 구조, 이런구조를 재귀적인 구조라 부른다.
- composite는 혼합물 복합물이란 의미를 지니고 있다.
나. 예제
a. Leaf(나뭇잎) 역할
- 내용물을 의미하며 내부에 다른 것은 넣을 수 없다.
public class File implements Entry{
private final EntryType type = EntryType.F;
private final String name;
public File(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
@Override
public String getType() {
return type.name();
}
@Override
public void print(String prefix) {
System.out.println(prefix+"/"+getName()+"("+getType()+")");
}
}
b. Composite(복합체) 역할
- 그릇을 의미하며 Leaf 역할이나 Composite 역할을 추가 할 수 있다.
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class Directory implements Entry {
private final EntryType type = EntryType.D;
private final String name;
private final List<Entry> list = new ArrayList<>();
public Directory(String name) {
this.name = name;
}
public void add(Entry entry) {
list.add(entry);
}
@Override
public String getName() {
return name;
}
@Override
public String getType() {
return type.name();
}
@Override
public void print(String prefix) {
System.out.println(prefix+"/"+getName()+"("+getType()+")");
for (Entry entry : list){
entry.print(prefix+"/"+getName());
}
}
}
c. Component의 역할
- Leaf 역할과 Composite 역할을 동일시 하는 역할을 한다.
- Component는 Leaf와 Composite의 공통 상위 클래스로 실현
public interface Entry {
String getName();
String getType();
void print(String prefix);
}
d. Main (Client)
public class Main {
public static void main(String[] args) {
Directory root = new Directory("root");
Directory etc = new Directory("etc");
Directory var = new Directory("var");
Directory app = new Directory("app");
app.add(new File("web.jar"));
var.add(new File("1.jpg"));
var.add(new File("2.jpg"));
var.add(new File("3.jpg"));
var.add(app);
root.add(etc);
root.add(var);
root.print("");
}
}
// 실행
/*
/root(D)
/root/etc(D)
/root/var(D)
/root/var/1.jpg(F)
/root/var/2.jpg(F)
/root/var/3.jpg(F)
/root/var/app(D)
/root/var/app/web.jar(F)
*/
다. 정리
a. 복수와 단수의 동일시
- 여러개를 모아 마치 하나인것처럼 취급하는 것이다.
- 일반적으로 트리 구조로 된 데이터 구조는 Composite 패턴에 해당
Composite 패턴은 상자와 내용물을 동일시하여 하나의 집합체로 보고 재귀적으로 탐색하는 패턴이다.
반응형
'개발서적 > 디자인패턴입문' 카테고리의 다른 글
<디자인패턴입문> 10. Visitor 패턴 (0) | 2021.05.03 |
---|---|
<디자인패턴입문> 9. Decorator 패턴 (0) | 2021.05.02 |
<디자인패턴입문> 7. Strategy 패턴 (0) | 2021.04.30 |
<디자인패턴입문> 6. Abstract Factory 패턴 (0) | 2021.04.26 |
<디자인패턴입문> 5. Bridge 패턴 (0) | 2021.04.25 |
블로그의 정보
57개월 BackEnd
BFine