设计模式杂谈 - 工厂方法模式与抽象工厂模式
设计模式杂谈 - 工厂方法模式与抽象工厂模式
参考
《大话设计模式》
http://ichennan.com/2016/08/09/DesignPattern.html
Overview
本来在刚学习完 工厂方法模式
的时候,感觉很清晰和明了,但是后来学习到了抽象工厂模式
的时候,瞬间感觉被搞懵了。工厂方法模式
和抽象工厂模式
不是一样吗? 这两个没什么区别呀。经过度娘的帮助我有一些我自己的看法,与大家分享。
工厂方法模式
我们先来看一下关于工厂方法模式的专业解释
工厂方法模式(Factory Method): 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
拙见:
我认为工厂模式是对简单工厂模式的一个优化,解决了简单工厂违反了开放-封闭
原则的问题。在工厂方法中如果增加增加一个操作对象的话,是不用对工厂类进行修改的。只需要建立一个新的工厂即可。由客户端决定实例化哪个子类的对象,而不是将创建对象的操作放在工厂中。
虽然工厂方法解决了简单工厂存在违反开放-封闭
原则,但是同时也带来了复杂度的上升: 每新建一个具体的操作类,都需要增加一个额外的工厂类。创建了大量的工厂类。
抽象工厂模式
同样,我们先来看一下关于抽象工厂的专业解释
抽象工厂模式(Abstract Factory), 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
拙见
我认为抽象工厂最大的特点是: 抽象工厂创建的是一系列产品,比如上图中的外设工厂,就是创建了一系列外设相关的产品。
总结
不同点
工厂方法模式和抽象工厂模式最大的区别就是: 工厂方法模式,一个工厂只创建一种产品,而抽象工厂模式创建的是一系列产品。
共同点
工厂方法和抽象工厂都是对简单工厂模式改良或者扩展,但是核心的编程思想仍然是工厂
的思想。
最后
有时候,设计模式之间的解析并非那么的明显,我们学设计模式一定不要照搬设计模式的模板,而是吸收其思想,有时候,我们可能会对标准的模式进行改造,使其适合特定的环境,有时候我们可能仅仅会时候某个设计模式的一部分,或者将多个设计模式结合在一起来使用。
关于本文,是本人对着两种模式的一个自我的总结,文中有任何纰漏,敬请斧正。