디자인 패턴 ~Composite~
12490 단어 객체 지향디자인 패턴신인 프로그래머 응원uml자바
1. 소개
GoF의 디자인 패턴에서 Composite 패턴을 정리합니다.
2. Composite 패턴이란?
3. 샘플 클래스 다이어그램
4. 샘플 프로그램
디렉토리, 파일 목록을 표시하는 프로그램입니다.
4-1. Entry 클래스
File과 Directory의 기본이 되는 클래스입니다.
Entry.java
public abstract class Entry {
public abstract String getName();
protected abstract void printList(String prefix);
public void printList() {
printList("");
}
}
4-2. File 클래스
파일을 나타내는 클래스입니다.
File.java
public class File extends Entry {
private String name;
public File(String name) {
this.name = name;
}
public String getName() {
return name;
}
protected void printList(String prefix) {
System.out.println(prefix + "/" + name);
}
}
4-3. Directory 클래스
디렉토리를 나타내는 클래스입니다.
Directory.java
import java.util.ArrayList;
import java.util.Iterator;
public class Directory extends Entry {
private String name;
private ArrayList<Entry> directory = new ArrayList<Entry>();
public Directory(String name) {
this.name = name;
}
public String getName() {
return name;
}
public Entry add(Entry entry) {
directory.add(entry);
return this;
}
protected void printList(String prefix) {
System.out.println(prefix + "/" + name);
Iterator<Entry> it = directory.iterator();
while (it.hasNext()) {
Entry entry = (Entry) it.next();
entry.printList(prefix + "/" + name);
}
}
}
4-4. Main 클래스
메인 처리를 실시하는 클래스입니다.
Main.java
public class Main {
public static void main(String[] args) {
Directory workspaceDir = new Directory("workspace");
Directory compositeDir = new Directory("composite");
Directory testDir1 = new Directory("test1");
Directory testDir2 = new Directory("test2");
workspaceDir.add(compositeDir);
workspaceDir.add(testDir1);
workspaceDir.add(testDir2);
File directory = new File("Directory.java");
File entity = new File("Entity.java");
File file = new File("file.java");
File main = new File("main.java");
compositeDir.add(directory);
compositeDir.add(entity);
compositeDir.add(file);
compositeDir.add(main);
workspaceDir.printList();
}
}
4-5. 실행 결과
/workspace
/workspace/composite
/workspace/composite/Directory.java
/workspace/composite/Entity.java
/workspace/composite/file.java
/workspace/composite/main.java
/workspace/test1
/workspace/test2
5. 장점
모든 객체(File, Directory)는 공통의 추상 클래스를 가지고 있으므로, 클라이언트로부터 봐, 어느 것이 File인가 Directory인가, 내용을 의식할 필요가 없고, 균일하게 취급할 수 있습니다 .
또한 새로운 클래스 (예 : SymbolicLink)를 추가해도 기본 클래스 (Entry)의 인터페이스가 변경되지 않으면 클라이언트의 처리에는 영향을 미치지 않습니다.
6. GitHub
7. 디자인 패턴 목록
8. 참고
이번 기사 및 샘플 프로그램은 이하의 서적을 바탕으로 작성하였습니다.
매우 이해하기 쉽고 공부가되었습니다. 감사합니다.
디자인 패턴이나 샘플 프로그램에 대한 설명이 상세하게 쓰여져 있으므로, 꼭 서적의 분도 봐 주세요.
Reference
이 문제에 관하여(디자인 패턴 ~Composite~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/i-tanaka730/items/577ca124f05bfe172248텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)