将这三种模式放到一起,是为了更好的看出模式的演变及其应用的范围。
设计模式一开张就来讲对象的创建管理。这也是在程序开发中最实用的模式。
简单工厂是最简单的一种模式,对使用者来说,它就是通过一个工厂类(也有人叫他万能类或者管理类)来获得一个产品接口的具体实现,而无须估计具体的产品实现细节;因此提供者只要保证工厂类和产品接口这两者不变,就能很好的维护客户或者调用代码的。简单工厂使用的范围是工厂类要相对简单,且变化比较缓慢;其缺点是工厂类无法扩展,不满足OCP原则。这应该是他没有被GOF认为是一种模式的原因吧。
工厂方法是在简单工厂的基础上变化而来,客户不再直接依赖一个一成不变工厂类,而是一个工厂接口,从而是用户及提供者都可以很方便的扩展工厂接口,而且整个代码结构保持不变,解决了简单工厂不满足OCP的问题。
抽象工厂是在工厂方法的基础上进一步演化而来。从上面的情况来看,简单工厂和工厂方法都是针对单一产品;如果工厂需要生产多个相互关联的产品(可以理解为同一工厂生产的A系列的产品不能同B系列产品混用),这时候就需要用抽象工厂模式了。抽象工厂模式的使用条件是保持产品结构的相对稳定,即它不能很好应对的增加新产品的变化(原生产产品A和产品B,现在要增加产品B)。