java设计模式---Abstract Facotry Pattern---抽象工厂模式

来源:互联网 发布:迟夙生的网络办公室 编辑:程序博客网 时间:2024/05/20 07:16

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



原创粉丝点击