최근 포토로그


2008/09/02 23:42

[DesignPattern - Composite] sample1 study. note

Design Pattern - Composite

1. 클래스다이어그램
2. Source
  • Entry.java
    package com.dazzilove.composite.sample1;

    public abstract class Entry {
    public abstract String getName();
    public abstract int getSize();

    public Entry add(Entry entry) throws FileTreatmentException {
    throw new FileTreatmentException();
    }

    public void printList() {
    printList("");
    }

    protected abstract void printList(String prefix);

    public String toString() {
    return getName() + " (" + getSize() + ")";
    }
    }
  • File.java
    package com.dazzilove.composite.sample1;

    public class File extends Entry {
    private String name;
    private int size;

    public File(String name, int size) {
    this.name = name;
    this.size = size;
    }

    @Override
    public String getName() {
    return name;
    }

    @Override
    public int getSize() {
    return size;
    }

    @Override
    protected void printList(String prefix) {
    System.out.println(prefix + "/" + this);
    }
    }
  • Directory.java
    package com.dazzilove.composite.sample1;

    import java.util.Iterator;
    import java.util.Vector;

    public class Directory extends Entry {
    private String name;
    private Vector directory = new Vector();

    public Directory(String name) {
    this.name = name;
    }

    @Override
    public String getName() {
    return name;
    }

    @Override
    public int getSize() {
    int size = 0;
    Iterator it = directory.iterator();
    while(it.hasNext()) {
    Entry entry = (Entry)it.next();
    size += entry.getSize();
    }
    return size;
    }

    @Override
    protected void printList(String prefix) {
    System.out.println(prefix + "/" + this);
    Iterator it = directory.iterator();
    while(it.hasNext()) {
    Entry entry = (Entry)it.next();
    entry.printList(prefix + "/" + name);
    }
    }

    public Entry add(Entry entry) {
    directory.add(entry);
    return this;
    }
    }
  • FileTreatmentException.java
    package com.dazzilove.composite.sample1;

    public class FileTreatmentException extends RuntimeException {
    public FileTreatmentException() {
    }
    public FileTreatmentException(String msg) {
    super(msg);
    }
    }
  • Main.java
    package com.dazzilove.composite.sample1;

    public class Main {
    public static void main(String[] args) {
    try {
    System.out.println("Making root entries....");
    Directory rootDir = new Directory("root");
    Directory binDir = new Directory("bin");
    Directory tmpDir = new Directory("tmp");
    Directory usrDir = new Directory("usr");
    rootDir.add(binDir);
    rootDir.add(tmpDir);
    rootDir.add(usrDir);
    binDir.add(new File("vi", 10000));
    binDir.add(new File("latex", 20000));
    rootDir.printList();

    System.out.println("");
    System.out.println("Making user entries...");
    Directory kim = new Directory("kim");
    Directory lee = new Directory("lee");
    Directory kang = new Directory("kang");
    usrDir.add(kim);
    usrDir.add(lee);
    usrDir.add(kang);
    kim.add(new File("diray.html", 100));
    kim.add(new File("composite.java", 200));
    lee.add(new File("memo.txt", 300));
    kang.add(new File("game.doc", 400));
    kang.add(new File("junk.mail", 500));
    rootDir.printList();
    } catch (FileTreatmentException e) {
    e.printStackTrace();
    }
    }
    }
3. 결과출력

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://dazzilove.egloos.com/tb/781448 [도움말]

핑백

  • dazzilove : 디자인 패턴 공부 2008-09-02 23:43:29 #

    ... 계층을 분리한다.Strategy sample1 : "Java 언어로 배우는 디자인 패턴 입문" Chapter10. Strategy- 알고리즘을 모두 교체하다.Composite sample1 : "Java 언어로 배우는 디자인 패턴 입문" Chapter11. Composite - 그릇과 내용물의 동일시 ... more

덧글

덧글 입력 영역



미투데이

문화꽃 키우기