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(){}; } }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值