设计原理:
代码清单:
抽象 Factory :
1 public abstract class Factory { 2 public static Factory getFactory(String classname){ 3 Factory factory = null; 4 try { 5 factory = (Factory) Class.forName(classname).newInstance(); 6 }catch (ClassNotFoundException e){ 7 e.printStackTrace(); 8 }catch (Exception e){ 9 e.printStackTrace(); 10 } 11 return factory; 12 } 13 public abstract Link creatLink(String caption,String url); 14 public abstract Tray createTray(String caption); 15 public abstract Page createPage(String title,String author); 16 }
抽象 Item :
public abstract class Item { protected String caption; public Item(String caption){ this.caption=caption; } public abstract String makeHTML(); }
抽象Link :
public abstract class Link extends Item{ protected String url; public Link(String caption,String url){ super(caption); this.url=url; } }
抽象 Page:
public abstract class Page { protected String title; protected String author; protected ArrayList content = new ArrayList(); public Page(String title,String author){ this.title=title; this.author=author; } public void add(Item item){ content.add(item); } public void output(){ try { String filename = title + ".html"; Writer writer = new FileWriter("d:/"+filename); writer.write(this.makeHTML()); writer.close(); System.out.println(filename + "编写完成"); }catch (IOException e){ e.printStackTrace(); } } public abstract String makeHTML(); }
抽象 Tray:
public abstract class Tray extends Item{ protected ArrayList tray = new ArrayList(); public Tray(String caption){ super(caption); } public void add(Item item){ tray.add(item); } }
实现:
ListFactory:
public class ListFactory extends Factory{ @Override public Link creatLink(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); } }
ListLink
public class ListLink extends Link{ public ListLink(String caption,String url){ super(caption,url); } @Override public String makeHTML() { return "<li><a>"+url+","+caption+"</a></li>\n"; } }
ListPage
public class ListPage extends Page{ public ListPage(String title,String author){ super(title,author); } @Override public String makeHTML() { StringBuffer buffer = new StringBuffer(); buffer.append("<html><head><title>"+title+"</title></head>\n"); buffer.append("<body>\n"); buffer.append("<h1>"+title+"</h1>\n"); buffer.append("<ul>\n"); Iterator it = content.iterator(); while(it.hasNext()){ Item item = (Item) it.next(); buffer.append(item.makeHTML()); } buffer.append("</ul>\n"); buffer.append("<hr><address>"+author+"</address>"); buffer.append("</body></html>\n"); return buffer.toString(); } }
ListTray
public class ListTray extends Tray{ public ListTray(String caption){ super(caption); } @Override public String makeHTML() { StringBuffer buffer = new StringBuffer(); buffer.append("<li>\n"); buffer.append(caption+"\n"); buffer.append("<ul>\n"); Iterator it = tray.iterator(); while (it.hasNext()){ Item item = (Item)it.next(); buffer.append(item.makeHTML()); } buffer.append("</ul>\n"); buffer.append("</li>\n"); return buffer.toString(); } }
测试类:
public class Main { public static void main(String[] args){ Factory factory = Factory.getFactory("com.design.abstractFactoryDesign.listfactory.ListFactory"); Link link = factory.creatLink("人名日报","www.rr.com"); Tray tray = factory.createTray("日报"); Page page = factory.createPage("我的人们日报","白壮"); tray.add(link); page.add(tray); page.output(); } }
结果:生成一个HTML 文件