介绍
我看了廖雪峰和菜鸟教程上对于这个模式的实现,存在一定的差别。在文末我会放出链接,并做一张简图进行对比,以及解释我的理解
我认为抽象工厂与工厂模式最大的差别,应该在于其面向的对象是有差别的。工厂模式面对的是同一类产品,比如裤子,可以生产各种各样的裤子;而抽象工厂模式面对的是多类产品组成的一个产品族
使用场景
实现
概述
代码
个人想法以及两篇文章的对比
文章对比
文章链接
简图对比(自带的作图并不是很好用…)
菜鸟教程
廖雪峰
阐述
简单地阐述一下。
菜鸟教程的
抽象工厂模式实现的是,抽象工厂是对各个工厂的一个抽象,提取工厂的公共部分,形成统一的接口以生成具体工厂。(不过参照菜鸟教程的文本,似乎也是在描述廖雪峰所实现的这样一个模型,不知道为什么实现的却是另外的模样)
在main函数中,可以看到,它调用整个系统的过程是
- 生成shape具体工厂
- 生成shape对象
- 生成Color具体工厂
- 生成Color对象
通过以上四个步骤,可以生成一个完整的shape+color产品。当然,以上操作完全可以进行封装以后再
廖雪峰的
教程认为,抽象工厂是对最终的复合产品(或者说 产品族)的一个抽象,
我的想法
关于这个设计模式,我有一些简单的思考
最初我对这个模式的期望是
- 抽象工厂提供整体的接口(或者抽象类之流,一个意思)
- 大型工厂extends抽象工厂接口,通过调用各个小型工厂生产部件,负责生产完整的、成套的产品
- 小型工厂负责生产各个部件
我会想,小型工厂和大型工厂是聚合关系(应该是聚合吧…),需要什么部件则将相应的小型工厂添加至大型工厂,也就是说,抽象工厂模式主要的抽象部分是在大型工厂这一块,小型工厂就是按照工厂模式实现即可
在看了菜鸟教程之后,发现和我对于该模式的期望不太一样,于是又查阅了一下廖雪峰的文章,有所收获
从
