书接N久以前我的博文——简单工厂设计模式,今天我要说的是工厂方法模式,这是对简单工厂的进一步抽象和推广。让我们来一起看一下吧:
首先我们来说说它的组成:
1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在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(); } }
好了,随着程序的编写与演示,你应该能明白它的编程思路及思想了:把不同的产品放在实现了工厂接口的不同工厂类里面(我们为每一个产品提供了一个工厂来“生产“它)。但工厂方法也有他局限的地方,那就是当面对的产品有复杂的等级结构的时候,例如,工厂除了生产家电外产品,还生产手机产品,这样一来家电是手机就是两大产品家族了,这两大家族下面包含了数量众多的产品,每个产品又有多个型号,这样就形成了一个复杂的产品树了。如果用工厂方法来设计这个产品家族系统,就必须为每个型号的产品创建一个对应的工厂类,当有数百种甚至上千种产品的时候,也必须要有对应的上百成千个工厂类,这就出现了传说的类爆炸,对于以后的维护来说,简直就是一场灾难.....
那么有没有更好的解决方案呢?嘿嘿,卖个关子,明天继续这个话题。。。