书接N久以前我的博文——简单工厂设计模式,今天我要说的是工厂方法模式,这是对简单工厂的进一步抽象和推广。让我们来一起看一下吧:

首先我们来说说它的组成:

1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。

2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。

3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。

4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

接下来,我们用一个例子来分析一下他的组成,这样你能更深刻的理解:

1)抽象的工厂角色:

public interface Factory {
}

2)抽象产品角色

public interface Product {
}

3)具体产品角色:

public class Cookies implements Product {
public Cookies(){
    System.out.println("Cookies ....");
}
}
public class IceCream  implements Product{
public IceCream(){
    System.out.println("IceCream....");
}
}

4)具体工厂角色:

public class CookiesFactory implements Factory{
public Product newProduct(){
    return new Cookies();
}
}
public class IceCreamFactory implements Factory{
public Product newProduct(){
    return new IceCream();
}
}

5)测试:

public class Test {
public static void main(String[] args) {
    new CookiesFactory().newProduct();
    new IceCreamFactory().newProduct();
}
}

 好了,随着程序的编写与演示,你应该能明白它的编程思路及思想了把不同的产品放在实现了工厂接口的不同工厂类里面(我们为每一个产品提供了一个工厂来“生产“它)工厂方法也有他局限的地方,那就是当面对的产品有复杂的等级结构的时候,例如,工厂除了生产家电外产品,还生产手机产品,这样一来家电是手机就是两大产品家族了,这两大家族下面包含了数量众多的产品,每个产品又有多个型号,这样就形成了一个复杂的产品树了。如果用工厂方法来设计这个产品家族系统,就必须为每个型号的产品创建一个对应的工厂类,当有数百种甚至上千种产品的时候,也必须要有对应的上百成千个工厂类,这就出现了传说的类爆炸,对于以后的维护来说,简直就是一场灾难.....

那么有没有更好的解决方案呢?嘿嘿,卖个关子,明天继续这个话题。。。