设计模式第二篇 工厂模式(2) 工厂方法模式 factory method

简单工厂模式 (参见http://blog.youkuaiyun.com/zj_1395201/article/details/6648340)的核心是那个核心工厂类,其决定何时创建哪一个具体产品。这样做的优点可以使客户端不必负责产品的具体创建,只需要消费产品即可。但是缺点是如果具体产品的种类很多的话,核心工厂类中判断逻辑会很复杂,而且如果需要加入新的产品时,就需要将创建该新产品的逻辑加入到核心工厂类中去!

工厂方法模式是简单工厂模式的进一步抽象与推广,由于运用了多态性,既继承了简单工厂模式的优点,又客服了其缺点。下面我们就来解释下工厂方法模式:

工厂方法模式的核心工厂类不再决定创建具体的产品,而是将创建具体产品的操作交给了子工厂类,而子工厂会对应一个具体的产品,并且负责其的创建工作。所以我们可以看出,此时的核心工厂类已经变成了一个抽象工厂角色,仅仅向子工厂提供必须实现的接口。其工作结构如下图所示:

这种进一步抽象的效果可以达到在需要加入新产品的时候,不需要修改具体的工厂类的效果!

抽象工厂:

public interface Creator { public Fruit getFruit(); }


具体工厂1:

public class AppleCreator implements Creator { @Override public Fruit getFruit() { return new Apple(); } }

具体工厂2:

public class GrapeCreator implements Creator { @Override public Fruit getFruit() { // TODO Auto-generated method stub return new Grape(); } }

抽象产品:

public interface Fruit { /** * 种植 */ public void plant(); }


具体产品1:

public class Grape implements Fruit { public Grape(){ System.out.println("Grape is produced..."); } @Override public void plant() { System.out.println("Grape is plant..."); } }


具体产品2:

public class Apple implements Fruit { public Apple(){ System.out.println("Apple is produced..."); } @Override public void plant() { System.out.println("Apple is plant..."); } }

客户端消费产品 :

public class Client { public static void main(String[] args) { Creator c1 = new AppleCreator(); Fruit apple = c1.getFruit(); System.out.println("============="); Creator c2 = new GrapeCreator(); Fruit grape = c2.getFruit(); } }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值