抽象工厂模式中的抽象工厂是把各种抽象零件组合成抽象产品。换句话说,处理的重点是在接口(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(){};
}
}