抽象工厂模式中的抽象工厂是把各种抽象零件组合成抽象产品。换句话说,处理的重点是在接口(API)而不是具体的实现。只利用接口就能把零件组合成产品。Template Method Pattern和Builder Pattern的情形是在子类进行具体的实现,而Abstract Factory Pattern也同样是由子类来处理具体的实现。在子类就会出现具体工厂利用具体零件组合成具体产品。
看例程:
public class ABstrctFactory { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Factory myFactory = Factory.getFactory("abstrctfactory.toyFactory"); Ear pigEar = myFactory.createEar("pig ear"); Tail pigTail = myFactory.createTail("pig tail"); Body pigBody = myFactory.createBody("pig body"); pigBody.add(pigEar); pigBody.add(pigTail); pigBody.output(); } }
public abstract class Factory { public static Factory getFactory(String classname) { Factory factory = null; try { factory = (Factory)Class.forName(classname).newInstance(); } catch(Exception e) { e.printStackTrace(); } return factory; } public abstract Ear createEar(String earString); public abstract Tail createTail(String tailString); public abstract Body createBody(String bodyString); }
public abstract class Item { public String itemName; public Item(String itemName) { this.itemName = itemName; } }
public class Tail extends Item { protected float length; public Tail(String tailName) { super(tailName); } }
public class Ear extends Item { protected float length; public Ear(String earString) { super(earString);; } }
public abstract class Body { protected Vector contendVector = new Vector(); public Body() { System.out.println("this is body of the toy"); } public void add(Item it) { contendVector.add(it); } public void output() { for(int i = 0;i<contendVector.size();i++) { Item item = (Item)contendVector.get(i); System.out.println((item.itemName)); } } }
public class toyFactory extends Factory { @Override public Tail createTail(String tailname) { return new Tail(tailname); } @Override public Ear createEar(String earString) { return new Ear(earString); } @Override public Body createBody(String bodyString) { return new Body(){}; } }