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

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



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值