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

来源:互联网 发布:淘宝好友分享在哪里 编辑:程序博客网 时间:2024/05/16 01:27

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

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

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

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

 

抽象工厂:

public interface Creator {public Fruit getFruit();}


具体工厂1:

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

 

具体工厂2:

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

 

抽象产品:

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


具体产品1:

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


具体产品2:

public class Apple implements Fruit {public Apple(){System.out.println("Apple is produced...");}@Overridepublic 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();}}





 

原创粉丝点击