工厂模式就是专门负责实例化大量相同接口的类。简单的工厂模式用《head first》中的例子就要生产不同的比萨,只需要告诉工厂你要什么样的比萨,它就会给你生产出来。这样的代码如下:
想一下简单的工厂模式为我们做了什么?相当于把生成对象的这个功能分离出去,也就是解耦让代码变得简单。这样做还有一个好处就是,在别人调用这个工厂的时候,不仅能简单地返回一个对象,还可以完成一些想要的操作。把这些操作放在这里就可以强制、统一地进行了。
这样做的初衷是想让代码尽量地简单,但是现在情况可能并不怎么好,因为在一个比萨工厂中要考虑所有的情况,而且在有所改变的时候又需要修改代码。这样本金功能简单的工厂类中的代码也开始变得复杂。其实这个解决方法很简单,对工厂也做一次抽象就好了:
到这里,我们解耦已经很彻底了,但是马上就会发现新的问题?如果甜的、辣的各种比萨都有一个特定的类去实现,那比萨的数量是相当庞大的,所以工厂模式中的工厂是需要好好设计的,应该可以看做解耦与类数目之间的平衡吧。