최근 포토로그


2008/08/25 23:51

[DesignPattern - Abstract Factory] sample1 study. note

Design Pattern - Builder

1. 클래스다이어그램 (AbstractFactory.uml)
2. Source
  • Item.java
    package com.dazzilove.abstractfactory.sample1.factory;

    public abstract class Item {
    protected String caption;

    public Item(String caption) {
    this.caption = caption;
    }

    public abstract String makeHTML();
    }
  • Link.java
    package com.dazzilove.abstractfactory.sample1.factory;

    public abstract class Link extends Item {
    protected String url;

    public Link(String caption, String url) {
    super(caption);
    this.url = url;
    }
    }
  • Tray.java
    package com.dazzilove.abstractfactory.sample1.factory;

    import java.util.Vector;

    public abstract class Tray extends Item {
    protected Vector tray = new Vector();

    public Tray (String caption) {
    super(caption);
    }

    public void add(Item item) {
    tray.add(item);
    }
    }
  • Page.java
    package com.dazzilove.abstractfactory.sample1.factory;

    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Writer;
    import java.util.Vector;

    public abstract class Page {
    protected String title;
    protected String author;
    protected Vector content = new Vector();

    public Page(String title, String author) {
    this.title = title;
    this.author = author;
    }

    public void add(Item item) {
    this.content.add(item);
    }

    public void output() {
    try {
    String fileName = title + ".html";
    Writer writer = new FileWriter(fileName);
    writer.write(this.makeHTML());
    writer.close();
    System.out.println(fileName + "을 작성했습니다.");
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    public abstract String makeHTML();
    }
  • Factory.java
    package com.dazzilove.abstractfactory.sample1.factory;

    public abstract class Factory {
    public static Factory getFactory(String className) {
    Factory factory = null;
    try {
    factory = (Factory)Class.forName(className).newInstance();
    } catch(ClassNotFoundException e) {
    System.out.println("클래스 " + className + "이 발견되지 않습니다.");
    } catch(Exception e) {
    e.printStackTrace();
    }

    return factory;
    }

    public abstract Link createLink(String caption, String url);

    public abstract Tray createTray(String caption);

    public abstract Page createPage(String title, String author);
    }
  • ListLink.java
    package com.dazzilove.abstractfactory.sample1.listfactory;

    import com.dazzilove.abstractfactory.sample1.factory.Link;

    public class ListLink extends Link {
    public ListLink(String caption, String url) {
    super(caption, url);
    }

    @Override
    public String makeHTML() {
    return " <li><a href=\"" + url + "\">" + caption + "</a></li>";
    }
    }
  • ListTray.java
    package com.dazzilove.abstractfactory.sample1.listfactory;

    import java.util.Iterator;

    import com.dazzilove.abstractfactory.sample1.factory.Item;
    import com.dazzilove.abstractfactory.sample1.factory.Tray;

    public class ListTray extends Tray {
    public ListTray(String caption) {
    super(caption);
    }

    @Override
    public String makeHTML() {
    StringBuilder sb = new StringBuilder();
    sb.append("<li>\n");
    sb.append(caption + "\n");
    sb.append("<ul>\n");
    Iterator<Item> it = tray.iterator();
    while(it.hasNext()) {
    Item item = it.next();
    sb.append(item.makeHTML());
    }
    sb.append("</ul>\n");
    sb.append("</li>\n");
    return sb.toString();
    }
    }
  • ListPage.java
    package com.dazzilove.abstractfactory.sample1.listfactory;

    import java.util.Iterator;

    import com.dazzilove.abstractfactory.sample1.factory.Item;
    import com.dazzilove.abstractfactory.sample1.factory.Page;

    public class ListPage extends Page {

    public ListPage(String title, String author) {
    super(title, author);
    }

    @Override
    public String makeHTML() {
    StringBuilder sb = new StringBuilder();
    sb.append("<html>\n");
    sb.append("<head><title>" + title + "</title></head>\n");
    sb.append("<body>\n");
    sb.append("<h1>" + title + "</h1>\n");
    sb.append("<ul>\n");
    Iterator<Item> it = content.iterator();
    while(it.hasNext()) {
    Item item = it.next();
    sb.append(item.makeHTML());
    }
    sb.append("</ul>\n");
    sb.append("<hr><address>" + author + "</address>\n");
    sb.append("</body>\n");
    sb.append("</html>\n");
    return sb.toString();
    }
    }
  • ListFactory.java
    package com.dazzilove.abstractfactory.sample1.listfactory;

    import com.dazzilove.abstractfactory.sample1.factory.Factory;
    import com.dazzilove.abstractfactory.sample1.factory.Link;
    import com.dazzilove.abstractfactory.sample1.factory.Page;
    import com.dazzilove.abstractfactory.sample1.factory.Tray;

    public class ListFactory extends Factory {

    @Override
    public Link createLink(String caption, String url) {
    return new ListLink(caption, url);
    }

    @Override
    public Tray createTray(String caption) {
    return new ListTray(caption);
    }

    @Override
    public Page createPage(String title, String author) {
    return new ListPage(title, author);
    }
    }
  • TableLink.java
    package com.dazzilove.abstractfactory.sample1.tablefactory;

    import com.dazzilove.abstractfactory.sample1.factory.Link;

    public class TableLink extends Link {

    public TableLink(String caption, String url) {
    super(caption, url);
    }

    @Override
    public String makeHTML() {
    return "<td style=\"border:solid 1 blue;\"><a href=\"" + url + "\">" + caption + "</a></td>\n";
    }
    }
  • tableTray.java
    package com.dazzilove.abstractfactory.sample1.tablefactory;

    import java.util.Iterator;

    import com.dazzilove.abstractfactory.sample1.factory.Item;
    import com.dazzilove.abstractfactory.sample1.factory.Tray;

    public class TableTray extends Tray {

    public TableTray(String caption) {
    super(caption);
    }

    @Override
    public String makeHTML() {
    StringBuilder sb = new StringBuilder();
    sb.append("<td>");
    sb.append("\n");
    sb.append("<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\" style=\"border:solid 1 blue; padding:2px;\">");
    sb.append("\n");
    sb.append("<tr>");
    sb.append("\n");
    sb.append("<td colspan=\"" + tray.size() + "\">");
    sb.append(caption);
    sb.append("</td>");
    sb.append("\n");
    sb.append("</tr>");
    sb.append("\n");
    sb.append("<tr>");
    sb.append("\n");
    Iterator<Item> it = tray.iterator();
    while(it.hasNext()) {
    Item item = it.next();
    sb.append(item.makeHTML());
    }
    sb.append("</tr>");
    sb.append("\n");
    sb.append("</table>");
    sb.append("\n");
    sb.append("</td>");
    sb.append("\n");
    return sb.toString();
    }
    }
  • TablePage.java
    package com.dazzilove.abstractfactory.sample1.tablefactory;

    import java.util.Iterator;

    import com.dazzilove.abstractfactory.sample1.factory.Item;
    import com.dazzilove.abstractfactory.sample1.factory.Page;

    public class TablePage extends Page {

    public TablePage(String title, String author) {
    super(title, author);
    }

    @Override
    public String makeHTML() {
    StringBuilder sb = new StringBuilder();
    sb.append("<html>");
    sb.append("\n");
    sb.append("<head><title>" + title + "</title></head>");
    sb.append("\n");
    sb.append("<body>");
    sb.append("\n");
    sb.append("<h1>" + title + "</h1>");
    sb.append("\n");
    sb.append("<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\" style=\"border:solid 1 balck; padding:3px; background-color: #EEEEEE;\">");
    sb.append("\n");
    Iterator<Item> it = content.iterator();
    while(it.hasNext()) {
    sb.append(it.next().makeHTML());
    }
    sb.append("\n");
    sb.append("</table>");
    sb.append("\n");
    sb.append("<hr><address>" + author + "</address>");
    sb.append("\n");
    sb.append("</body>");
    sb.append("\n");
    sb.append("</html>");
    sb.append("\n");
    return sb.toString();
    }
    }
  • TableFactory.java
    package com.dazzilove.abstractfactory.sample1.tablefactory;

    import com.dazzilove.abstractfactory.sample1.factory.Factory;
    import com.dazzilove.abstractfactory.sample1.factory.Link;
    import com.dazzilove.abstractfactory.sample1.factory.Page;
    import com.dazzilove.abstractfactory.sample1.factory.Tray;

    public class TableFactory extends Factory {

    @Override
    public Link createLink(String caption, String url) {
    return new TableLink(caption, url);
    }

    @Override
    public Tray createTray(String caption) {
    return new TableTray(caption);
    }

    @Override
    public Page createPage(String title, String author) {
    return new TablePage(title, author);
    }
    }
3. 결과출력

트랙백

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

핑백

  • dazzilove : 디자인 패턴 공부 2008-08-26 01:16:30 #

    ... 인스턴스를 조립한다.Abstract Factory sample1</a> : "Java 언어로 배우는 디자인 패턴 입문" Chapter8. Abstract Factory- 관련된 부품을 조립해서 제품을 만든다.Bridge <a href="http://dazzilove.egloos.com/749541">sample1 : "Java 언어로 배우는 디자인 패턴 입 ... more

덧글

덧글 입력 영역



미투데이

문화꽃 키우기