Design Pattern - Builder
1. 클래스다이어그램 (AbstractFactory.uml)
2. Source
1. 클래스다이어그램 (AbstractFactory.uml)

- 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);
}
} - tray = new Vector
- 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();
} - content = new Vector
- 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);
}
}



덧글