Java设计模式之抽象工厂

Java设计模式之抽象工厂

什么是抽象工厂?

抽象工厂的工作是将“抽象零件” 组装为“抽象产品”,
它指的是“不考虑具体怎样实现, 而是仅关注接口 ( APT )" 的状态。在 Abstract Factory 模式中将会出现抽象工厂, 它会将抽象零件组装为抽象产品。也就是说, 我们井不关心零件的具体实现, 而是只关心接口( API )。我们仅使用该接口 ( API ) 将零件组装成为产品

类说明

image
image

有什么有点和不足?
优点

容易增加具体得工厂

不足

增加新的产品比较费事

代码

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 ceateLink(String caption,String url);
	public abstract Tray ceateTray(String caption);
	public abstract Page ceatePage(String title,String author);
}

Item

public abstract class Item {
	protected String caption;
	public Item(String caption) {
		super();
		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;
	}
}

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);
	}
}

Page

public abstract class Page {
	protected String title;
	protected String author;
	protected ArrayList content = new ArrayList<>();
	public Page(String title, String author) {
		super();
		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(fileName);
			writer.write(this.makeHTML());
			writer.close();
			System.out.println(fileName + "编写完成");
		} catch (Exception e) {
		}
	}
	public abstract String makeHTML();
}

ListFactory

public class ListFactory extends Factory{
	@Override
	public Link ceateLink(String caption, String url) {
		return new ListLink(caption,url);
	}
	@Override
	public Tray ceateTray(String caption) {
		return new ListTray(caption);
	}
	@Override
	public Page ceatePage(String title, String author) {
		return new ListPage(title,author);
	}
}

ListLink

public class ListLink extends Link{
	public ListLink(String caption, String url) {
		super(caption, url);
	}
	public String makeHTML() {
		return "<li><a  href =\" " +  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(" <hl> " + title + "</hl >\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();
	}
}

TableFactory

public class TableFactory extends Factory{
	@Override
	public Link ceateLink(String caption, String url) {
		return new TableLink(caption,url);
	}
	@Override
	public Tray ceateTray(String caption) {
		return new TableTray(caption);
	}
	@Override
	public Page ceatePage(String title, String author) {
		return new TablePage(title,author);
	}
}

TableLink

public class TableLink extends Link{
	public TableLink(String caption, String url) {
		super(caption, url);
	}
	@Override
	public String makeHTML() {
		return "<td><a href =\"" +  url	+ "\">"  + caption + "</a></td>\n";
	}
}

TablePage

public class TablePage extends Page{
	public TablePage(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("<hl>"+title+"</hl >\n" ) ;
		buffer.append("<table width=\"80%\" border=\"3\">\n"); 
		Iterator   it=	content.iterator();
		while (it.hasNext ()) {
			Item item= (Item)it.next();
			buffer.append(" <tr>" + item.makeHTML() + " </tr>" ) ;
		}
		buffer.append("</table>\n"); 
		buffer.append("<hr><address>" +author+ "</ a d d r e s s >" ) ; 
		buffer.append("</body></html>\n");
		return buffer. toString ();

	}
}

TableTray

public class TableTray extends Tray{
	public TableTray(String caption) {
		super(caption);
	}
	@Override
	public String makeHTML() {
		StringBuffer  buffer=  new  StringBuffer()  ; 
		buffer.append ( " <td>" ) ;
		buffer.append("<table width=\" 100%\" border =\" l \"><tr>" ) ;
		buffer.append( " <td  bgcolor =\"#cccccc \"align=\"center\" colspan=\" "+  tray.size () + "\"><b>" +caption+ "</b></td>" ) ;
		buffer.append("</tr> \n" ) ; 
		buffer.append("<tr> \n" ) ; 
		Iterator it= tray.iterator(); 
		while (it.hasNext()) {
			Item item = (Item)it.next() ;
			buffer.append (item. makeHTML ()) ;
		}
		buffer.append(" </ tr></table>" ) ; 
		buffer.append( " </td> " ) ;
		return buffer.toString() ;
	}
}

运行结果

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值