抽象工厂的工作是将“抽象零件”组装为“抽象产品”。
在Abstract Factory模式中将会出现抽象工厂,它将会抽象零件组装为抽象产品。也就是说人们并不关心零件的具体实现,而只关心接口,我们仅使用该接口将零件组装成为产品。
在Tempate Method模式和Builder模式中,子层这一层负责方法的具体实现,在Abstract Factory模式也是一样的。在子类这一层中有具体的工厂,它负责将具体的零件组装成为具体的产品。
示例程序:将带有层次关系的链接集合制作成HTML文件。
抽象的零件类:Item类
Item类是Link类和Tray类的父类,这样Link类和Tray类就具有可替换性了,makeHTML方法是抽象方法。
package AbstractFactory;
//零件抽象类,构造函数,抽象方法
public abstract class Item {
protected String caption;
public Item(String caption) {
// TODO Auto-generated constructor stub
this.caption = caption;
}
public abstract String makeHTML();
}
抽象的零件:Link类,是抽象的表示HTML的超链接的类。
URL字段中保存的是超链接所指向的地址,Link类并没有实现父类中的抽象方法,所以它还是一个抽象类。
package AbstractFactory;
//零件的抽象类,初始化
public abstract class Link extends Item {
protected String url;
public Link(String caption,String url) {
super(caption);
// TODO Auto-generated constructor stub
this.url = url;
}
}
抽象的零件:Tray类,是表示一个含有多个Link类和Tray类的容器,使用add()方法把Link类和Tray类集合在一起。
package AbstractFactory;
import java.util.ArrayList;
//零件的抽象类,初始化
public abstract class Tray extends Item {
protected ArrayList tray = new ArrayList();
public Tray(String caption) {
super(caption);
// TODO Auto-generated constructor stub
}
public void add(Item item){
tray.add(item);
}
}
抽象的产品:Page类,抽象的表示HTML页面的类,如果将Link和Tray比喻成抽象的“零件”,那么Page类就是抽象的“产品”。
package AbstractFactory;
import java.io.FileWriter;
import java.io.Writer;
import j